关于c#:get set对简单变量有什么好处

what is the benefit of get set for simple variables

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

Possible Duplicate:
Public Fields versus Automatic Properties

我以为这会在某个地方得到答复,但在通常的地方我找不到。我在想,这样做有什么好处

1
2
private int _foo;
public int foo {get {return _foo;} set{_foo = value;}}

1
public int foo {get; set;}

只是

1
public int foo;

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


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

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

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

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

所以总结一下

属性(get/set)相对于字段的好处:

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

属性缺点:

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


这个问题在这里被问了很多次。这些案件没有明确的有利证据(财产内部没有逻辑)。更重要的是,使用一个字段,您可以获得一些最小(nano)速度优势,但与99.99%的情况无关。

MS定义的准则建议使用properties来扩展和维护代码。因此,遵循这一指导原则可以让不熟悉代码的人更容易地阅读代码。


请参阅本jon skeet教程或何时使用属性而不是函数来讨论这一问题。关于这个话题,还有10亿个相关的问题和资源,谷歌/SEach将公开这些问题和资源。

我希望这有帮助。


假设在类中有公共变量来存储数据。但是,如果需要进行数据验证,则无法对类中的公共变量进行验证。因为你无法控制他们。外部人员,其他程序员,任何访问您的项目的人都可以在一个类中编辑这些公共变量。

主要是,为了控制对类中数据的访问,我们使用属性。它们仍然是变量,但在类的权限内。这些变量可以来自任何数据类型(例如字符串、int、bool、对象等)

可以使用三个主要选项来实现属性,这取决于您希望通过属性实现什么/如何实现。

1
2
3
Get - access to the property and retrieve its value
Let - access to the property and update its value
Set - access to the property and used with objects

了解get/set方法的实际使用是至关重要的。我同意提格拉恩的意见。

如果有人要把我灌输,我想知道原因!


据我所知,使用"get set"提供了一个属性。基本上,在为变量提供get set属性的同时,您正在实现封装的概念。


我想你已经回答了你自己的问题。

对于这种简单的情况,没有真正的优势。自动获取/设置方法是通过使用速记属性创建的:

1
public int Foo { get; set; }

对于需要转换的更复杂的示例,您可以灵活地使用显式的get和set方法更改内容。