1

可能重复:
C#中的字段和属性有什么区别

这有什么不同:

class Name {
  public int x;
}

还有这个:

class Name {
  int cx;
  public int x {
    get { return cx; }
    set { cx = value; }
  }
}

是一样的还是有一些不同?谢谢

4

1 回答 1

4

它们是不同的。

第一个x是字段,后者x是属性。虽然属性在代码中“像字段一样被访问”,但这正是 C# 的美妙之处;不同的定义实际上导致不同的不兼容类型1

使用自动属性将等同于后者(但更容易编写):

class Name {
    public int x { get; set; }
}

我喜欢Brian Rasmussen 对相关/重复问题的回答

字段和属性看起来一样,但它们并不[相同]。属性是方法,因此属性不支持某些事情,并且某些事情可能会发生在属性上,但绝不会发生在字段的情况下。

然后答案继续列出一些关键差异,包括用法和可观察语义。


1将字段更改为属性(反之亦然)是一种破坏类型的更改,需要针对新类型重新编译早期绑定(例如静态类型)代码。

于 2012-09-12T21:19:05.910 回答