封装是指将类的内部数据隐藏起来不让对象实例直接对其操作,C#中提供了属性机制来对类内部的状态进行操作。
在C#中封装可以通过public、private、protected和internal等关键字来体现。
为什么要对类的内部进行封装呢?
例:
public class Person
{
public string name;
public int age;
}
如果我实例化上面这个类
Person p=new Person()
那么我给age(年龄)赋值为负数,这显然不符合业务逻辑,人的年龄可能为负数吗?
p.age="-1"
使用封装后
public class Person
{
private string name;
public string Name
{
get{return name;}
set{name=value;}
}
private int age;
public string Age
{
get{return age;}
set{
if(value>0)
{
age=value; //这里对年龄进行控制,年龄必须要大于0才能赋值.那么年龄为-1就不能赋值
}
else
{
throw(new ArgumentException("error", value,"年龄不能为负数"));//这里会抛出异常
}
}
}
}
封装后对象实例只能对属性进行操作,属性中可以写下自己的逻辑来控制。