转载,看到一个很形象的比喻,所以贴过来(原地址:见该页面下边笔记),并加上个人需要的一点补充
感谢@sally44形象的比喻,其他语言亦可以借鉴
————————————————————————————————————
比喻:
比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:D不在他家里)【即父类A,继承子类B和D(D不在同一个工程/程序集),同一个工程/程序集内的另一个类C】
如果我们给A的事情增加修饰符:
- public事件,地球人都知道,全公开,随便一个人都知道【任何公有成员可以被外部的类访问】
- protected事件,A,B,D知道(A和他的所有儿子知道,即父类和继承其的子类都知道,妻子C不知道)【该类内部和继承类中可以访问。】
- private事件,只有A知道(个人隐私,自己的心事?)【只有同一个类中的函数可以访问它的私有成员】
- internal事件,A,B,C知道(A家里人都知道,私生子D不知道)【同一个程序集的对象可以访问】【举例新建两个工程,里面添加一个引用关系,被引用的里面建立两个类,此时internal无法访问另一个】
- protected internal事件,A,B,C,D都知道,其它人不知道【Protected和internal的并集,符合任意一个即可】【同一程序集及在外部任意继承内部的某些类】
————————————————————————————————————
封装是什么?
封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。
抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。
C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。
一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:
- public:所有对象都可以访问;
- private:对象本身在对象内部可以访问;
- protected:只有该类对象及其子类对象可以访问
- internal:同一个程序集的对象可以访问;
- protected internal:访问限于当前程序集或派生自包含类的类型。