get set for simple variables的好处是什么

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

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

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

要么

 public int foo {get; set;} 

只是

 public int foo; 

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

这个问题在这里被多次询问过。 这些案件没有明确的利益证据(财产内部没有逻辑)。 更多的说,使用一个领域,你获得一些最小(纳米)速度的好处,但与99.99%的情况无关。

MS定义的指南 建议使用properties ,以实现代码的可扩展性和可维护性。 因此遵循该指南可以让不熟悉代码的人更轻松地阅读它。

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

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

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

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

总结一下

属性(获取/设置)对字段的好处:

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

财产的缺点:

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

请参阅此Jon Skeet教程或何时使用属性而不是函数来讨论此事。 关于这个主题还有十亿个相关问题和资源,Google / SE搜索将会公开这些问题和资源。

我希望这有帮助。

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

想象一下,您在类中有公共变量来存储数据。 但是,如果您需要进行数据validation,则无法在类中使用公共变量。 因为你无法控制它们。 局外人,其他程序员,访问项目的任何人都可以编辑类中的公共变量。

主要是,为了控制类中数据的访问,我们使用属性。 它们仍然是变量,但在你class级的权威范围内。 这些变量可以来自任何数据类型(例如String,Int,Bool,Objects等)

可以使用三个主要选项来强制执行属性,具体取决于您希望使用属性实现的内容。

 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方法的实际用途至关重要。 我同意Tigaran的评论。

如果有人打算让我失望,我想知道原因!

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

对于像这样的简单案例,没有真正的优势。 使用速记属性创建自动获取/设置方法:

 public int Foo { get; set; } 

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