get set 对于简单变量有什么好处

rez*_*eza 2 c# get set

可能的重复:
公共字段与自动属性

我认为这个问题会在某个地方得到解答,但我在通常的地方找不到它。我想知道这样做有什么好处

private int _foo;
public int foo {get {return _foo;} set{_foo = value;}}
Run Code Online (Sandbox Code Playgroud)

或者

public int foo {get; set;}
Run Code Online (Sandbox Code Playgroud)

刚刚超过

public int foo;
Run Code Online (Sandbox Code Playgroud)

如果需要更复杂的操作,我可以看到好处,但是对于像这样的简单情况有什么好处呢?

Kna*_*ģis 5

实际上,所有指南都是关于创建可重用库的。在那里,当您创建property(使用 get/set)时,您还可以在以后添加当某人获取或设置值时执行的代码(例如添加验证等),而无需更改代码的外部定义(因此不需要重新编译其他库)。但是,如果您总是重新编译整个解决方案并且没有其他人使用该库,则这没有任何价值。

使用属性的另一个好处是您可以限制谁可以获取或设置该值。例如,每个人都可以获取该值,但只有派生类可以设置它(protected)。

也就是说,仍然建议在属性存在时就使用它们public(而不是private字段)。

我仅在需要最佳性能时才公开字段(例如连续访问该值一百万次)。

所以总结一下

属性(获取/设置)相对于字段的优点:

  • 稍后能够添加代码,而无需重新编译引用此代码的程序集。
  • 能够提供私有/受保护/内部集和公共获取(或任何其他组合)。
  • 公共字段不符合 CLS

属性的缺点:

  • 访问速度较慢(读和写)。
  • 无法作为ref参数传递给方法。