Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时使用属性与方法?_C#_.net_Oop - Fatal编程技术网

C# 何时使用属性与方法?

C# 何时使用属性与方法?,c#,.net,oop,C#,.net,Oop,可能重复: 关于何时使用属性与方法,是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在一个属性中生成,任何属性都可以生成一个方法,但有时决定何时使用另一个属性可能会变得模糊 我希望你们在决定两者之间的关系时能记住一些规则。一般标准是关于副作用的。如果通过调用一个成员来获取一个值,您只能获取该值,它是一个属性。如果有副作用,它可能是一种方法 换句话说:属性即使不是字段,其行为也应该非常类似于字段。这意味着不会产生副作用,不会花太长时间执行,也不会抛出异常。补充克莱特斯的话 这来自m

可能重复:

关于何时使用属性与方法,是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在一个属性中生成,任何属性都可以生成一个方法,但有时决定何时使用另一个属性可能会变得模糊


我希望你们在决定两者之间的关系时能记住一些规则。

一般标准是关于副作用的。如果通过调用一个成员来获取一个值,您只能获取该值,它是一个属性。如果有副作用,它可能是一种方法


换句话说:属性即使不是字段,其行为也应该非常类似于字段。这意味着不会产生副作用,不会花太长时间执行,也不会抛出异常。

补充克莱特斯的话

这来自msdn:“财产使用指南” 请参阅“属性与方法”部分:

  • 该操作是一种转换,例如Object.ToString
  • 操作非常昂贵,您希望与用户通信,认为他们应该考虑缓存结果。
  • 使用get访问器获取属性值会产生明显的副作用
  • 连续两次调用成员会产生不同的结果
  • 执行顺序很重要。请注意,类型的属性应该能够以任何顺序设置和检索
  • 该成员是静态的,但返回一个可以更改的值
  • 该成员返回一个数组。返回数组的属性可能会产生误导。通常需要返回内部数组的副本,以便用户无法更改内部状态。这一点,再加上用户可以很容易地假设它是一个索引属性,导致代码效率低下。在下面的代码示例中,对Methods属性的每次调用都会创建数组的副本。因此,将在以下循环中创建阵列的2n+1个副本
当某些er。。属性正在快速执行(例如,ctrl.Color、ctrl.Text、ctrl.Width、DateTime.Now)。但如果它表示一个进程,则使用方法(例如str.GetHash()、machine.GetFqdn()、file.GetMd5()。因此,在md5文件中,您不会将其设置为属性

这一点最为突出:

手术费用很高 您希望与用户通信 他们应该考虑缓存 结果

请注意.NET的DateTime.Now虽然速度很快,而且是一个属性,但当它在程序中多次调用时,需要对其进行缓存,即使是在彼此接近的地方。他们决定让它成为一个属性,属性有一种当前性的感觉,与调用方法时不同,它没有即时性/当前性的感觉。所以,您需要考虑到,即使当您获得一个值并需要缓存时,但如果它需要感觉到即时,请务必使用属性


毕竟,如果某个东西真的很快,而且感觉不象是一个昂贵的操作,那么它必须有一个能够传达其快速性的结构。我认为这就是为什么.NET(或任何具有属性构造的语言)很有吸引力的原因,当您可以将其设置为属性时,它不会强制开发人员使用方法,当您可以围绕重载运算符编写性能良好的代码时,它也不会强制开发人员使用方法,这是一个很好的问题。我不知道这方面的最佳做法。 在我看来,这通常是一个常识问题

这些属性与它自身的对象/类相关,并且通常描述它。最好的例子是UI元素、背景、颜色、属性

这些方法通常是对象/类可以执行并产生结果的操作。这里最好的例子是MessageBox的方法。它执行一个操作并返回一个结果。

我想看看关于属性和方法的文章。

它提到在基本层面上看一看,选择属性或方法取决于“has”、“does”参数。如果您需要的信息是属性或质量,请使用属性。如果它是一个动作,那么方法

但在实际层面上,一直以这种方式实施可能很困难

  • 正如已经正确指出的那样,属性应该是轻量级的,方法不需要
  • 如果信息依赖于构造函数中调用的某些初始化代码,那么您应该更喜欢属性
  • 如果您的信息需要大量操作,请使用方法
  • 如果它影响第三个元素,如文件、屏幕或其他,请使用方法
  • 不能有不返回任何内容的属性(void)

用基本的词语来描述,属性描述对象,而方法是对象可以执行的操作。
对于表示汽车的对象,
drive()
将是一种方法,
color
将是一种属性。

是否引发异常?如果设置的值无效,您会怎么做?我认为这是在字段上使用属性的原因之一。。。在接受值之前对其进行检查的能力。