成员访问修饰符
-
所有显式声明在类声明中的成员都是互相可见的, 无论给他们声明访问等级
-
继承的成员不在类声明中显式声明, 所以, 继承成员对派生类的成员是可见的, 也可以是不可见的, 基类私有派生类看不见
-
访问级别
-
public
-
private
-
protected
-
internal
-
protected internal
-
-
必须对每个成员指定成员访问等级, 不指定默认为private
-
成员的可访问性不能高于他所在的类
(0)访问成员的区域
类MyClass被声明为public, 他的成员的可见性依赖于各个成员的修饰符
public class MyClass
{
public int Member1;
private int Member2;
protected int Member3;
internal int Member4;
protected internal int Member5;
}
另一个类能否访问MyClass成员取决于该类的两个特征
-
是否派生自MyClass
-
是否与MyClass类在同一个程序集
两个特征征化分出4个集合
-
在同一程序集且继承自MyClass(右下)
-
在同一程序集但不继承MyClass(左下)
-
在不同的程序集且继承MyClass(右上)
-
在不同的程序集且不继承MyClass(左上)
(1)public公有成员
Y / N | 不能继承MyClass的类 | 继承MyClass的类 |
---|---|---|
所有其他程序集中的类 | Y | Y |
相同程序集中的类 | Y | Y |
(2)private私有成员
-
只能被他自己的类成员访问
-
private成员可以被嵌套在他内部的类成员访问
Y / N | 不能继承MyClass的类 | 继承MyClass的类 |
---|---|---|
所有其他程序集中的类 | N | N |
相同程序集中的类 | N | N |
(3)protected受保护的成员
-
他自己的类成员
-
任何程序集中, 他的派生类成员
-
嵌套在他内部的类
Y / N | 不能继承MyClass的类 | 继承MyClass的类 |
---|---|---|
所有其他程序集中的类 | N | Y |
相同程序集中的类 | N | Y |
(4)internal内部成员
-
所在同一程序集内部所有类, 包括所在同一程序集的派生类
Y / N | 不能继承MyClass的类 | 继承MyClass的类 |
---|---|---|
所有其他程序集中的类 | N | N |
相同程序集中的类 | Y | Y |
(5)protected internal受保护的内部成员
-
所在同一程序集内部所有类, 包括所在同一程序集的派生类
-
不在同一程序集的派生类
Y / N | 不能继承MyClass的类 | 继承MyClass的类 |
---|---|---|
所有其他程序集中的类 | N | Y |
相同程序集中的类 | Y | Y |
(6)小结
修饰符 | 含义 |
---|---|
private | 只在类的内部可访问 |
internal | 对该程序集内所有类可访问 |
protected | 对其所有派生类可访问 |
protected internal | 对其所有派生类或在该程序集内部所有类 |
public | 对任何类可访问 |