再论访问修饰符
前言:
今天又见到了老问题,在C#中访问修饰符的作用范围有哪些? 我的回答是:
i)当修饰类中成员函数时:
- private :只能被类中使用;
- public :能够在类内部以及类外部使用;
- protected :可以在类内部及派生类中使用,雷同于private;
- internal :可以在程序集中使用,雷同于public ;
ii)当修饰类时:
- public :可以在类外,进行类的实例化;
- private :不可以在类外进行对象实例化;
特别是对修饰类时的访问修饰符用法,不甚清楚。经过进一步的调试、及网上查阅,基本厘清,在此详细列举。
访问修饰符细分:
将就private ,public ,protected ,internal ,protected internal进行分析:
当修饰类中字段、成员函数时:
- private :只能被类内部使用;
- public :能够在类内部及外部访问;
- protected :能够在类内部、即派生类中访问。其功能相似于private ,可认为是其延展;
- internal :能够在程序集内部使用,其功能相似于public ,可认为是其压缩;ex,同一项目的控制台程序,在主类上加一类,其中包含internal 时,在主函数中的实例化对象,其可以访问internal 成员。而若在另加项目的类库中实现类,则主函数中无法访问internal 成员;
- protected internal :能够在类内部、派生类以及程序集中被访问;
当修饰类时:
类型的定义只能是internal 或public 类型的。 其余的protected ,private和protected internal 类型对于包含在命名空间中的类型来说都是没有意义的。
- internal :在程序集内部可以对类实例化 。ex,主函数上的internal 类,可以在主函数中加以使用。而在另加项目类库中实现的internal类,则主函数中,无法使用。即,不可访问;
- public :在程序及内、外都可以对其访问。
默认情况下,其为internal 类型。
综述之,通过对访问修饰符的进一步细分、分析,理清了以前的混淆之处。呵呵~