属性vs类中的公共声明变量

时间:2012-09-12 21:17:55

标签: c# class properties public

  

可能重复:
  What is the difference between a field and a property in C#

这有什么不同:

class Name {
  public int x;
}

和此:

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

它是一样的还是有些差异? 谢谢

1 个答案:

答案 0 :(得分:4)

他们是不同的。

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

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

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

我喜欢布莱恩·拉斯穆森(Brian Rasmussen)的this answer一个相关/重复的问题:

  

字段和属性看起来相同,但它们 [相同]。属性是方法,因此某些属性不支持,以及可能在属性中发生的一些事情,但从不在字段的情况下。

然后,答案将列出一些关于使用和可观察语义的关键差异。


1 将字段更改为属性(或反之亦然)是类型中断更改并要求早期绑定(例如静态类型)代码针对新类型重新编译