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; |
如果需要更复杂的操作,我可以看到好处,但是对于这样一个简单的案例,有什么好处呢?
实际上,所有的指导原则都是关于创建可重用库的。在这里,当您创建一个
使用属性的另一个好处是,可以限制谁可以获取或设置该值。例如,每个人都可以获取该值,但只有派生类可以设置该值(
也就是说,当属性是
我只在需要最佳性能时公开字段(比如连续访问一百万次值)。
所以总结一下
属性(get/set)相对于字段的好处:
- 以后添加代码而不重新编译引用此代码的程序集的功能。
- 能够提供私有/受保护/内部集和公共get(或任何其他组合)。
- 公共字段不符合CLS。
属性缺点:
- 访问速度较慢(读写)。
- 无法将作为
ref 参数传递给方法。
这个问题在这里被问了很多次。这些案件没有明确的有利证据(财产内部没有逻辑)。更重要的是,使用一个字段,您可以获得一些最小(nano)速度优势,但与99.99%的情况无关。
MS定义的准则建议使用
请参阅本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方法更改内容。