C# 何时使用属性与方法?
可能重复:C# 何时使用属性与方法?,c#,.net,oop,C#,.net,Oop,可能重复: 关于何时使用属性与方法,是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在一个属性中生成,任何属性都可以生成一个方法,但有时决定何时使用另一个属性可能会变得模糊 我希望你们在决定两者之间的关系时能记住一些规则。一般标准是关于副作用的。如果通过调用一个成员来获取一个值,您只能获取该值,它是一个属性。如果有副作用,它可能是一种方法 换句话说:属性即使不是字段,其行为也应该非常类似于字段。这意味着不会产生副作用,不会花太长时间执行,也不会抛出异常。补充克莱特斯的话 这来自m
关于何时使用属性与方法,是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在一个属性中生成,任何属性都可以生成一个方法,但有时决定何时使用另一个属性可能会变得模糊
我希望你们在决定两者之间的关系时能记住一些规则。一般标准是关于副作用的。如果通过调用一个成员来获取一个值,您只能获取该值,它是一个属性。如果有副作用,它可能是一种方法
换句话说:属性即使不是字段,其行为也应该非常类似于字段。这意味着不会产生副作用,不会花太长时间执行,也不会抛出异常。补充克莱特斯的话 这来自msdn:“财产使用指南” 请参阅“属性与方法”部分:
- 该操作是一种转换,例如Object.ToString
- 操作非常昂贵,您希望与用户通信,认为他们应该考虑缓存结果。
- 使用get访问器获取属性值会产生明显的副作用
- 连续两次调用成员会产生不同的结果
- 执行顺序很重要。请注意,类型的属性应该能够以任何顺序设置和检索
- 该成员是静态的,但返回一个可以更改的值
- 该成员返回一个数组。返回数组的属性可能会产生误导。通常需要返回内部数组的副本,以便用户无法更改内部状态。这一点,再加上用户可以很容易地假设它是一个索引属性,导致代码效率低下。在下面的代码示例中,对Methods属性的每次调用都会创建数组的副本。因此,将在以下循环中创建阵列的2n+1个副本李>
毕竟,如果某个东西真的很快,而且感觉不象是一个昂贵的操作,那么它必须有一个能够传达其快速性的结构。我认为这就是为什么.NET(或任何具有属性构造的语言)很有吸引力的原因,当您可以将其设置为属性时,它不会强制开发人员使用方法,当您可以围绕重载运算符编写性能良好的代码时,它也不会强制开发人员使用方法,这是一个很好的问题。我不知道这方面的最佳做法。 在我看来,这通常是一个常识问题 这些属性与它自身的对象/类相关,并且通常描述它。最好的例子是UI元素、背景、颜色、属性 这些方法通常是对象/类可以执行并产生结果的操作。这里最好的例子是MessageBox的方法。它执行一个操作并返回一个结果。我想看看关于属性和方法的文章。
它提到在基本层面上看一看,选择属性或方法取决于“has”、“does”参数。如果您需要的信息是属性或质量,请使用属性。如果它是一个动作,那么方法 但在实际层面上,一直以这种方式实施可能很困难
- 正如已经正确指出的那样,属性应该是轻量级的,方法不需要李>
- 如果信息依赖于构造函数中调用的某些初始化代码,那么您应该更喜欢属性
- 如果您的信息需要大量操作,请使用方法
- 如果它影响第三个元素,如文件、屏幕或其他,请使用方法
- 不能有不返回任何内容的属性(void)
对于表示汽车的对象,
drive()
将是一种方法,color
将是一种属性。是否引发异常?如果设置的值无效,您会怎么做?我认为这是在字段上使用属性的原因之一。。。在接受值之前对其进行检查的能力。