有人可以解释我使用自动实现的属性c#背后的想法是什么?自动执行的属性c#
public class Customer { public int ID { get; set; } public string Name { get; set; } }
我得到了使用私人领域属性的动机,因此我们可以确定如何访问私人领域。但是在这里 - 就像定义该领域从第一位开始公开一样。没有?
将字段定义为“公共常量”还是将其定义为具有只读属性之间有区别吗?
回答
公共自动属性与公共字段不同,它们不是二进制兼容的。如果你实现一个公共领域,并且稍后想要添加一些逻辑,则必须将其更改为一个属性,从而引入重大更改(由于二进制不兼容)。这就是为什么许多惯例声明你不应该公开领域而是使用属性。
所以,对于任何简单的非私有类值成员来说,自动属性只是一个方便的起点,允许在稍后添加逻辑的同时保持二进制兼容性。
我会让MSDN在这里做的说话....
“在C#3.0及更高版本,自动实现的属性使属性声明更简洁当属性访问器不需要额外的逻辑。他们当你声明一个属性如下面的例子(例如见MSDN文章),所示时,编译器创建一个私人的匿名支持字段,只能通过属性的get和set访问器来访问“
可能是最有利的二fference是你可以做前/后验证,提高PropertyChanged
事件等
定义一个字段为“公共常量”或定义它具有只读属性之间有区别吗?
是的,只读字段必须有专用字段声明。该字段可以在内部由类更改,将字段标记为常量意味着它不能修改。
2:一个公共常量必须在编译时定义,您不能使用引用对象。只有从System.ValueType继承的类(字符串,整数,双,...)
一个const也是静态的,而只有一个获取方法的属性是不是(每个类都有它自己的实例。)
关于1:建议使用自动实现的属性,因为您可以稍后实施其他逻辑而不会中断更改。这方面的一个例子可以在Learning about Auto-Implemented Properties
自动实现的属性本质上是语法糖。一旦编译完成,后备存储就存在。它只是不可用的源代码。
正如其他人所说,属性和字段是不相同的。字段和属性不兼容,因此它们之间的变化是一个突破性变化。另外,您不能使用与字段的数据绑定。
最后一点。虽然在你的案例中,这个例子和公共领域之间的功能差别很小,但你可以改变其中一个访问者的可见性。所以,要创建使用自动属性只读属性,你可以这样做:
public int ID { get; private set; }
在这种情况下,get访问是公共的,按照整个签名,但set访问是私人的。
- 1. C#自动执行的属性帮助
- 2. xsd.exe自动执行的属性
- 3. VB10,自动执行的属性和COM
- 4. 何时执行C#自动属性初始化?
- 5. C#CodeDom自动属性
- 6. 访问自动属性 - C#
- 7. C#自动属性设置
- 8. 获取在行动中执行方法的自定义属性
- 9. 阻止方法执行的C#属性
- 10. 执行属性
- 11. 自动执行C++库的C#打包
- 12. C#惰性加载自动属性
- 13. 自定义执行财产属性
- 14. 自动执行的属性没有得到编译错误
- 15. 单元测试自动执行的属性是否有价值
- 16. 在C#中,我可以让自动属性在属性的帮助下执行一些额外的工作吗?
- 17. C#中自动实现的属性
- 18. 在C#中自动生成的属性
- 19. 自动属性
- 20. C# - 自动属性VS 3.0之前的属性
- 21. 在javascript中自动执行函数作为对象属性值
- 22. Ruby/Rails - 为模型属性执行自动计算
- 23. 意外的C#行为与自动属性和构造函数
- 24. 动态删除属性的C#属性
- 25. C#属性网格自动隐藏
- 26. 用Codedom生成C#自动属性
- 27. C#:DataGridView属性自动更改?
- 28. C#自动属性 - 设置默认值
- 29. C#类属性getter调用自动
- 30. 在asp.net c中自动完成属性#
[c#:可能有重复的纯粹公共属性](http://stackoverflow.com/questions/2901591/c-what-is-the-point-in-having-a-purely - 公有财产) – 2010-05-25 09:08:58
和http://stackoverflow.com/questions/1277572,http://stackoverflow.com/questions/1272521,http://stackoverflow.com/questions/1180860和更多 – 2010-05-25 09:21:33
可能重复的[在C#3.0 +中的属性和字段的区别](http://stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3-0) – nawfal 2013-06-03 18:28:29