在C#中,是什么使字段与属性不同?何时应该使用字段而不是属性?


当前回答

财产封装字段,从而使您能够对要设置或检索的值执行附加处理。如果您不需要对字段值进行任何预处理或后处理,那么使用财产通常是过分的。

其他回答

使用财产,您可以在属性值更改时(也称为PropertyChangedEvent)或在值更改为支持取消之前引发事件。

这对于(直接访问)字段是不可能的。

public class Person {
 private string _name;

 public event EventHandler NameChanging;     
 public event EventHandler NameChanged;

 public string Name{
  get
  {
     return _name;
  }
  set
  {
     OnNameChanging();
     _name = value;
     OnNameChanged();
  }
 }

 private void OnNameChanging(){       
     NameChanging?.Invoke(this,EventArgs.Empty);       
 }

 private void OnNameChanged(){
     NameChanged?.Invoke(this,EventArgs.Empty);
 }
}

字段是类中的变量。字段是可以通过使用访问修饰符封装的数据。

财产与字段类似,它们定义与对象关联的状态和数据。

与字段不同,属性有一种特殊的语法来控制用户如何读取数据和写入数据,这些被称为get和set运算符。集合逻辑通常可用于进行验证。

来自维基百科——面向对象编程:

面向对象编程(OOP)是一种基于“对象”概念的编程范式,“对象”是以字段形式包含数据的数据结构,通常称为属性;和代码,以过程的形式,通常称为方法。(添加强调)

财产实际上是对象行为的一部分,但其设计是为了给对象的消费者提供使用对象数据的幻觉/抽象。

如果要使用线程原语,则必须使用字段。财产可以破坏线程代码。除此之外,科里所说的是正确的。

一个重要的区别是接口可以有财产,但不能有字段。对我来说,这强调了财产应该用于定义类的公共接口,而字段则用于类的私有内部工作。通常,我很少创建公共字段,类似地,我也很少创建非公共财产。