一尘不染

为什么使用简单属性而不是C#中的字段?[重复]

c#

这个问题已经在这里有了答案

10年前关闭。

可能的重复项:

我应该使用公共属性和私有字段还是公共字段来存储数据?

C#3.0中自动属性和公共字段之间的区别

人们似乎在教条上坚持在田野上使用公共财产,但是为什么在简单财产的情况下它是如此重要?

怎么

public int Foo { get; set; }

public int Foo;

我不由自主地想到了两者之间的一些实际区别:

  • 使用反射访问成员(稀有,大多数体面的反射算法将解决差异)
  • 第二项允许您将字段用作ref和out参数的有效参数,这似乎是使用字段版本的优势
  • 字段在远程处理中不起作用(可能我从未使用过远程处理,但我想他们不会使用)?

除了这些相当罕见的情况外,稍后将Foo更改为计算属性会导致代码行更改为0。


阅读 241

收藏
2020-05-19

共1个答案

一尘不染

使用属性有两个明显的优点:

  • 如果以后需要额外的逻辑,则可以进行版本控制。向getter或setter添加逻辑不会破坏现有代码。
  • 它允许数据绑定正常工作(大多数数据绑定框架不适用于字段)。

另外,几乎没有缺点。JIT编译器可以内联这样的简单,自动属性,因此没有理由不使用它们。

另外,您提到:

除了这些相当罕见的情况外,稍后将Foo更改为计算属性会导致代码行更改为0。

这不需要更改您的代码,但确实会迫使您重新编译所有代码。从字段更改为属性是一项重大的API更改,这将要求重新编译引用您程序集的所有程序集。通过将其设置为自动属性,您可以仅发送新的二进制文件并保持API兼容性。这就是我上面提到的“版本控制”优势…

2020-05-19