封装即把一个或多个项目封闭在一个物理的或者逻辑的包中,在面向对象程序设计方法中,封装是为了防止对实现细节的访问.
抽象和封装是面向对象程序设计的相关特性.抽象允许相关信息可视化,封装则是开发者实现所需级别的抽象.在C#中,封装根据需求,设置使用者的访问权限,通过访问修饰符实现.
C#支持的访问修饰符如下:
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问;
internal:同一个程序集的对象可以访问;
protected internal: 访问限于当前程序集或派生类自包含类的类型.
public>internal>protected>internal
public访问修饰符
public修饰符允许一个类将其成员变量和成员函数暴露给其他的函数的对象.任何公有成员可以被外部的类访问.
示例如下:
此处代码最后输出结果为:长4.5;宽3.5;高1.6;体积25.2
在上面的实例中,成员变量height,length,weight被声明为public,所以它们可以被函数Main()使用guanyuan类的实例qq访问.
成员函数Display()和volume()可以直接访问这些变量.
成员函数Display()和volume()也被声明为public,所以它也能被Main()使用guyuan类的实例qq访问
private访问修饰符
private访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏.只有同一个类中的函数可以访问它的私有成员,即使是类的实例也不能访问它的私有成员.
该实例证明了这一点:
说明:
1.length和width被声明为私有变量,以防止直接在类的外部访问和修改.
2.AcceptDetails方法允许用户输入矩形的长度和宽度,这是通过公有方法来操作私有变量的一个例子.
3.GetArea方法用于计算矩形的面积,而Display方法用于显示矩形的属性和面积.
4.在ExecuteRectangle类中,通过创建Rectangle类的实例,然后调用其公有方法,来执行操作.这样,主程序无法直接访问和修改矩形的长度和宽度,而是通过类提供的公有接口来进行操作,实现了封装.
Protected访问修饰符
protected访问修饰符允许子类访问它的基类的成员变量和成员函数,这样有助于实现继承,我们后边再详细讨论这个.
Internal访问修饰符
internal访问修饰符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象,换句话说,带有internal访问修饰符的任何成员可以被定义在该成员锁定义的应用程序内的任何类或方法访问.
下边这个实例说明了这点:
在上面的实例中,可以看到GetArea()声明的时候不带有任何访问修饰符,如果没有指定访问修饰符,则使用类成员的默认修饰符,即private.
Protected Internal 访问修饰符
protected internal访问修饰符允许在本类,派生类或者包含该类的程序集中访问,这也被用于实现继承.
这边简单讲一下区别,比如人A为父类,妻子B,儿子为C,私生子为D(私生子,不是和妻子的孩子)
比如给A的事情增加修饰符:
public事件,地球人都知道,全公开(例如钓鱼岛是中国的)
protected事件,A,C,D都知道(即父类和子类都知道,而妻子不是子类,所以子类不知道)
private事件,只有A自己知道(比如心事)
internal事件:A,B,C知道(家事,私生子不在家,所以不知道)
protect internal事件,A,B,C,D都知道,其他人不知道