可能重复:
C#中的字段和属性有什么区别
这有什么不同:
class Name {
public int x;
}
还有这个:
class Name {
int cx;
public int x {
get { return cx; }
set { cx = value; }
}
}
是一样的还是有一些不同?谢谢
可能重复:
C#中的字段和属性有什么区别
这有什么不同:
class Name {
public int x;
}
还有这个:
class Name {
int cx;
public int x {
get { return cx; }
set { cx = value; }
}
}
是一样的还是有一些不同?谢谢
它们是不同的。
第一个x
是字段,后者x
是属性。虽然属性在代码中“像字段一样被访问”,但这正是 C# 的美妙之处;不同的定义实际上导致不同的不兼容类型1。
使用自动属性将等同于后者(但更容易编写):
class Name {
public int x { get; set; }
}
我喜欢Brian Rasmussen 对相关/重复问题的回答:
字段和属性看起来一样,但它们并不[相同]。属性是方法,因此属性不支持某些事情,并且某些事情可能会发生在属性上,但绝不会发生在字段的情况下。
然后答案继续列出一些关键差异,包括用法和可观察语义。
1将字段更改为属性(反之亦然)是一种破坏类型的更改,需要针对新类型重新编译早期绑定(例如静态类型)代码。