最近在C#的书,常常遇到一些问题,却总是喜欢刨根问底。下面我就来比较一下自动属性的优缺点。
自动属性可以使你快速的生成一个变量的get/set 方法,在编译的时候会自动生成一个私有变量,并且这个私有的变量在IDE中是看不到的。这样减少了代码的输入,更简洁,而不会过度的降低代码属性的可读性。具体的效果可见.NET 3.x新特性之自动属性及集合初始化这篇文章,对比很鲜明。
优点 | 缺点 | |
非自动属性 |
可以通过私有字段对属性中有些赋值或者取值逻辑校验, 可以对get/set 设置访问级别,可以定义只读或只写 |
代码需手动输入 |
自动属性 |
无需手动添加私有字段,减少代码输入,更简洁 对象和集合初始化更快捷。 |
不能访问私有字段,不能对属性中有些赋值或者取值逻辑校验、 必须包含get/set的存取,无法直接使用这种方式定义只读或只写。 |
另外,还有一个容易混淆的点。在接口中定义属性可以定义访问块get和set中的哪一个能用于该属性。例如:
interface IMyInterface { int MyInt { get; set; } }
其中,MyInt属性有get和set存取器。如果要对访问有更严格的限制,可以省略他们之中的任一个。
这个语法类似自动属性,但是自动属性是为类(而不是接口)定义的,自动属性必须包括get和set存取器。
其实,对于程序员来讲,没有绝对的优缺点,只有如何用最快捷的方式完美的实现所需的功能,一切都是因时因地而变,唯一不变的是对速度和完美的追求。我们要用好工具,而不能被工具使用。