什么时候应该在C#中使用get和set属性?什么时候在C#中使用get和set属性?
回答
按照Property Usage Guidelines上MSDN:
使用当构件是一个逻辑数据成员的属性。在以下成员声明中,Name是一个属性,因为它是该类的逻辑成员。
时使用的方法:
- 的操作是一个转换,如
Object.ToString
。- 该操作非常昂贵,您希望与用户沟通他们应该考虑缓存结果。
- 使用get访问器获取属性值会产生可观察的副作用。
- 连续两次调用成员会产生不同的结果。
- 执行顺序很重要。请注意,应该可以按任意顺序设置和检索类型的属性。
- 该成员是静态的,但返回一个可以更改的值。
- 该成员返回一个数组。返回数组的属性可能非常具有误导性。通常有必要返回内部数组的副本,以便用户不能更改内部状态。这加上用户可以轻易认定它是索引属性的事实导致代码效率低下。在下面的代码示例中,每次调用Methods属性都会创建一个数组副本。结果,数组的2n + 1个副本将在以下循环中创建。
我了解属性,但没有回答这个问题......我发现在Cody的回答中提到的[Jon Skeet](http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx)更具可读性。 – KMC 2012-03-12 04:00:44
@KMC我同意,Skeet先生是一个比你的平均MSDN页面更好的老师/传播者。 – 2012-03-12 06:13:06
Properties可能是你正在寻找的,如果你决定你需要获取和设置方法。对于一个体面的讨论,为什么你会,以及为什么你不想使用属性检查乔恩Skeet的Why Properties Matter。
使用属性而不是公开内部类数据的一个很好的理由显然是为了保护这些数据。您可以控制个人属性的访问权限以及验证正在设置的数据。您也可以实现计算属性来计算值,这与您班级的用户看起来没有任何其他属性不同。
+1。精确到点。 – Pradeep 2011-03-16 06:18:19
属性是OP的含义。 – 2011-03-16 06:20:07
请注意,您无法生成接受参数的属性,因此可能需要Get方法而不是带getter属性的情况。 – 2011-03-16 06:21:11
有两个独立的(广义上)的原因,你想使用属性,而不是get/set方法:
- 你想要一个字段的简洁,但要授予只读访问“外部”,同时读写访问“内部”。
- 你想要一个字段的简洁和内涵,而秘密地能够在通风橱下执行或操作的东西,比如:
- 需要在一定范围内的值(设定期间)。
- 自动清理或调整某些数值(设置期间)。
- 更新(或推迟更新)其他依赖数据(设置期间)。
- 避免对该字段进行完整计算,直到字段实际使用(在获取期间)。
- 还有其他的东西,否则你将需要放在方法内,但如果外部世界仍然把它看作是一个领域的话,会更喜欢。
- 1. 什么时候应该在C#中使用属性?
- 2. 什么是C++中的“set”?他们什么时候有用?
- 3. 在C#中使用典型的get set属性...带参数
- 4. Srsly,为什么使用get和set mutators?
- 5. C#自动属性 - 为什么我必须写“get; set;”?
- 6. 从Get属性引用Set属性
- 7. 为什么在XAML中不调用附加属性Set和Get静态方法?
- 8. 什么是python属性get和set命令?
- 9. 当有很多属性时,不使用set和get方法
- 10. 什么时候和为什么我会在C++中使用abs
- 11. 什么时候在C++中使用“declare”?
- 12. 什么时候在django中使用auto_created属性的字段?
- 13. 什么时候使用__proto__和什么时候使用原型
- 14. 什么时候使用Ruby和什么时候使用PHP
- 15. 什么时候应该使用EJB事务属性'Mandatory'和'Never'
- 16. 什么时候使用for-each和什么时候在xslt中使用apply-templates?
- 17. 在apex中定义get和set的自动属性有什么意义?
- 18. 为什么facebook在memcached中使用TCP for SET和UDP for GET
- 19. 使用get/set asp.net c#theres太多的属性
- 20. 什么时候使用goto * expr;在C?
- 21. 何时调用属性get和set方法?
- 22. 什么时候在Sqlite.Net类上使用了Index属性?
- 23. 什么时候应该使用HTML4/HTML5中的name属性?
- 24. 目标C什么时候使用alloc和什么时候不到
- 25. 测试什么时候没有属性
- 26. C#:什么时候使用waitHandle,当我们可以使用threadPool属性
- 27. 什么时候应该out和ref参数在C#中使用?
- 28. 什么时候使用cerr和当cout在C++中?
- 29. 什么时候在C中使用ntohs和ntohl?
- 30. 我怎么装饰与DISPID属性(get和set?都不是?)
http://www.csharp-station.com/Tutorials/Lesson10.aspx – 2011-03-16 06:17:09
user544079 - 我相信你是从Java背景的。 Cody的答案总结了C#的方法。 – Pradeep 2011-03-16 06:17:51