一般面向对象编程语言都要求成员变量不能直接暴露给外部访问,如下:
public class A
{
public int Age; //这是不好的,待会有程序员可能把-1赋给Age
}
为了防止乱赋值,C#设计了一个属性机制,要求把成员变量设为私有,在通过属性来控制成员变量的读写,如下:
public class B
{
private int age; //私有成员变量
public int Age //age的属性
{
get{ return age; } //读取器
set{ //写入器
if(value>0)
age = value; //value是准备写入的值
}
}
}
这样Age就像保安一样,挡在age的前面。访问age的时候需要通过Age许可,如下:
B b = new B();
b.Age = -1; //这是不行的,-1被带入value,value<0,判断不成立b.Age = 10; //这是可行的
第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了,而第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写,相当于如下代码:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
get和set 是属性的访问器
我们可以理解为 get为 获得属性的值 读取属性的值
set为 设置属性的值 写入值给属性
当只有get时,只有只读属性
当只有set时,只有写入属性
既有get和set时 ,包含了读写属性的功能
本文介绍了C#中封装的概念及其实现方式,通过对比直接暴露成员变量与使用属性机制控制成员变量读写的优劣,详细解释了如何利用私有成员变量结合get和set访问器实现对对象状态的有效控制。
4578

被折叠的 条评论
为什么被折叠?



