原来属性的Get和Set访问器还可以这样用
以前记得论坛有过一个帖子是专门讨论C#中属性的用处的今天翻阅《C#高级编程》的时候又发现一条
C#允许给属性的get和set访问器设置不同的访问修饰符,所以属性可以有公共的get访问器和私有的或者是受保护的set访问器。这有助于控制属性的设置方式或者时间。
可惜的是书上给的例子完全错了,就是很普通的属性设置
程序代码:
public string Name { get { return _name; } set { _name = value; } }这么好的书,这电脑的高科技的,怎么也这样蒙人啊?完完全全都是public访问级别嘛
后来经过自己尝试,发现正确的用法是这样的
public string Name { get { return _name; } protected set { _name = value; }//注意看访问级别,和外层的不一样哦}这样以来,就实现了get和set具备不同的访问级别啦
使用的时候 要主意以下几点:
1、定时属性的时候,外层一定要有访问级别修饰符(就是public string Name)这里啦
2、在定义get和set访问级别的时候,只能为其中一个单独设置
意思就是说不能在get前边来一个public,然后在set前边再来一个修饰符,两个当中只有一个能设置的哦
别扔转头,什么,不就是想给set和get两个设置不同的访问级别嘛,你以为第一条上说的外层的修饰符是干嘛用的?
看例子,get前边没写访问修饰符吧?这样它的权限默认是外层的权限,也就是public啦
set的权限我就不用再说了,前边白纸黑字,一个 protected 在那大大的竖着呢
3、外层的访问权限一定要比内层的更为宽松,这个也要主意,还说上边的例子
为了实现同样的访问控制级别,如果你写成
程序代码:
protected string Name //外层protected { public get { return _name; } //内层public set { _name = value; } }这样就不行了,编译器是会报错的哦
[[italic] 本帖最后由 天堂落日 于 2008-1-23 13:27 编辑 [/italic]]