Possible Duplicate:
Public Fields versus Automatic Properties
我认为这个问题会在某个地方得到解答,但我没有在通常的地方找到它。我在想,这样做有什么好处
private int _foo;
public int foo {get {return _foo;} set{_foo = value;}}
或
public int foo {get; set;}
刚好
public int foo;
如果需要更复杂的操作,我可以看到好处,但对于像这样的简单案例有什么好处?
实际上,所有指南都是关于创建可重用库的。在那里,当您创建一个 property
(使用 get/set)时,您还创造了稍后添加代码的机会,当有人获取或设置该值时(例如添加验证等)而不更改代码的外部定义(因此不需要重新编译其他库)。但是,如果您总是重新编译整个解决方案并且没有其他人在使用该库,那么这就没有任何值(value)。
使用属性的另一个好处是您可以限制谁可以获取或设置值。例如,每个人都可以获得该值,但只有派生类可以设置它(protected
)。
这就是说,仍然建议始终在 public
属性(与 private
字段相对)时使用属性。
我只在需要最佳性能时才公开字段(例如连续访问该值一百万次)。
总结一下
属性(获取/设置)对字段的好处:
- 能够在以后添加代码而无需重新编译引用它的程序集。
- 能够提供私有(private)/ protected /内部集和公共(public)获取(或任何其他组合)。
- 公共(public)字段不是 CLS compliant .
属性的缺点:
- 访问速度较慢(读写)。
- 不能作为
ref
参数传递给方法。