get set for simple variables的好处是什么?

时间:2012-11-09 08:49:22

标签: c# get set

  

可能重复:
  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;

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

6 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

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

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

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

总结

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

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

属性的缺点:

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

答案 2 :(得分:2)

有关此问题的讨论,请参阅this Jon Skeet tutorialWhen to use properties instead of functions。关于这一主题还有十亿个相关问题和资源,Google / SE将会公开这些问题和资源。

我希望这会有所帮助。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

主要是,为了控制班级中对数据的访问,我们使用属性。它们仍然是变量,但在您的类的权限范围内。这些变量可以来自任何数据类型(例如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的评论。

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

答案 5 :(得分:0)

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

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

public int Foo { get; set; }

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