关于C#:老实说,公共变量和公共属性访问器之间有什么区别?

Honestly, what's the difference between public variable and public property accessor?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
What is the difference between a field and a property in C#
Should I use public properties and private fields or public fields for data?

有什么区别:

1
public string varA;

1
public string varA { get; set; }


公共属性访问器在将来为您提供了更多的灵活性。

如果要添加验证以设置值,只需编写一个非默认的setter。其他代码都不需要修改。

也有可能是您希望用代码替换默认getter的原因。对于一个公共变量来说,这可能是一个真正的痛苦。


除了其他答案外,您还可以使用属性使值为只读或甚至仅设置:

1
public int Item { get; private set; } // read-only outside the class. Can only be set privately.

我也遇到过这样的情况:稍后我决定代理一个对象,或者添加AOP,这基本上需要属性。


公共属性通过公开的getter和setter方法访问字段和内部类代码。公共字段直接访问字段。

使用属性提供了提供抽象层和设计层的可能性(使集合访问器受保护的能力,私有)。

当指定了一个属性而没有主体存在时,编译器将创建一个基础私有字段,该字段用于存储值。基本上:

1
2
3
4
5
private int item = 0;
public int Item {
get { return item; }
set {item = value; }
}

一般来说,我倾向于将属性用于公开的变量,将字段用于私有变量。如果该字段被多次访问,并且速度是一个关键的设计要求,我可能会考虑使用该字段。