一般面向对象编程语言都要求成员变量不能直接暴露给外部访问,如下:
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时 ,包含了读写属性的功能