Asa*_*sad 7 c# field properties
根据这些评论编辑:
你的意思是"财产"与"战场"吗?public String S1; vs public String S2 {get; 组; } - 达娜
完全是达娜,我的意思是一样的.- 阿萨德
阿萨德:你真的需要尝试用其他术语来描述你的意思,这样我们才能更好地理解你的问题.C#没有全局变量.您可以在C#中定义的字段不是全局的 - 它们是类类型的成员.- dthorpe
嗨fellas,
需要您对Fieldand 之间差异的专家意见Property.在我的项目中,我使用了某些全局变量,后来我改为"属性".我的经理问的是使用Properties变量代替的好处是什么Fields.
虽然我回复了他Property提供了一种安全/安全/间接访问,Field而不是直接修改它们,如果它们被声明public或protected.但请给我一些更有说服力的论据.
感谢致敬
@Asad:你应该把你的术语说得对:Fields不是Global Variables,C#没有全局变量(正如一些评论者提到的:你可以模拟全局变量,但你不应该这样做).
Pau*_*sik 11
主要优点是您可以将各种功能附加到属性,例如验证,同步等.您不能为类字段执行此操作.例如,一个字段可以在赋值时抛出BCL异常,但它不能抛出一个对你的问题域中的逻辑有意义的异常.
还想象一下尝试保护字段以进行线程同步.您必须在代码中访问该字段的所有位置编写额外的代码.要使用属性执行此操作,您只需将getter和setter包含在一个位置即可.(但要注意!如果你正在使用可变类型,那么在属性getter和setter中使用lock的容易性可能会给你一种错误的安全感.请参阅这篇文章中接受的答案.)
现在,您可能认为验证和同步对于此特定值并不重要,并且它们可能永远不会用于此特定实例.但是通过使用属性而不是直接字段访问,可以使您的应用程序在将来更易于维护.(假设整数字段的值突然需要来自与原始实现不同的源,并且需要从字符串转换为int.如果使用属性来包装字段,则在一个地方进行更改,使用该属性的所有客户端代码根本不需要更改!)
此外,为了管理在许多类(全局)之间共享的信息,请查看单例模式.但要小心!即使它看起来整洁干净,你仍然会遇到麻烦.虽然如果你真的需要全局数据,你应该使用单例中包含的属性.如果不出意外,这是一个很好的组织策略.
为了避免单例或"全局"数据的问题,请将依赖注入视为更好的替代方案.
| 归档时间: |
|
| 查看次数: |
3450 次 |
| 最近记录: |