成员访回修饰符
本章之前的两节阐述了类的可访问性。对类的可访问性,只有两种修饰符:internal和public。
本节阐述成员的可访问性。类的可访问性描述了类的可见性;成员的可访问性描述了类成员的可
见性。
声明在类中的每个成员对系统的不同部分可见,这依赖于类声明中指派给它的访问修饰符。
你已经看到private成员仅对同一类的其他成员可见,而public成员对程序集外部的类也可见。
在这一节,我们将再次研究public和private访问级别,以及其他3个可访问性级别。
在研究成员访问性的细节之前,首先阐述一些通用内容。
在研究成员访问性的细节之前,首先阐述一些通用内容。
- 所有显式声明在类声明中的成员都是互相可见的,无论它们的访问性如何。
- 继承的成员不在类的声明中显式声明,所以,如你所见,继承的成员对派生类的成员可
以是可见的,也可以是不可见的。 - 以下是5个成员访问级别的名称。目前为止我们只介绍了public和private。
- public
- private
- protected
- internal
- protected internal
- 必须对每个成员指定成员访问级别。如果不指定某个成员的访问级别,它的喼式访问级
别为private。 - 成员的可访问性不能比它的类高。也就是说,如果一个类的可访问性限于它所在的程序
集,那么类的成员在程序集的外部也不可见,无论它们的访问修饰符是什么,public也不
例外。
访问成员的区域
类通过成员的访问修饰符指明了哪些成员可以被其他类访问。你已经了解了public和
private修饰符。下面的类中声明了5种访问级别的成员
public class MyClass{public int Member1;private int Member2;protected int Member3;internal int Member4;protected internal int Member5;
}
另一个类(如类B)能否访问这些成员取决于该类的两个特征。
-
类是否派生自MyClass类。
-
类B是否和MyClass类在同一程序集。
这两个特征划分出4个集合,如图8-15所示。与MyClass类相比,其他类可以是下面任意一种。 -
在同一程序集且继承MyClass(右下)。
-
在同一程序集但不继承MyClass(左下)。
-
在不同的程序集且继承myClass(右上)。
-
在不同的程序集且不继承myClass(左上)。
这些特征用于定义5种访问级别,下一节将详细介绍这一点。
公有成员的可访问性
public访问级别是限制最少的。所有的类,包括程序集内部的类和外部的类都可以自由地访
问成员。图8-16阐明了MyClass的public类成员的可访问性。
要声明一个公有成员,使用public访问修饰符,如:
public int Member1;
私有成员的可访问性
private访问级别是限制最严格的。
- private类成员只能被它自己的类的成员访问。它不能被其他的类访问,包括继承它的类。
- 然而,private成员能被嵌套在它的类中的类成员访问。
图8-17阐明了私有成员的可访问性。
受保护成员的可访问性
protected访问级别如同private访问级别,但它允许派生自该类的类访问该成员。图8-18
阐明了受保护成员的可访问性。注意,即使程序集外部继承该类的类也能访问该成员。
内部成员的可访问性
标记为internal的成员对程序集内部的所有类可见,但对程序集外部的类不可见,如图8-19
所示。
受保护内部成员的可访问性
标记为protected internal的成员对所有继承该类的类以及程序集内部的所有类可见,如
图8-20所示。注意,允许访问的集合是protected修饰符允许访问的类的集合加上internal修
饰符允许访问的类的集合。注意,这是protected和internal的并集,不是交集。
成员访问修饰符小结
下面两个表格概括了5种成员访问级别的特征。表词列出了修饰符,并直观地概括了它们
的作用。
图8-21演示了5个成员访问修饰符的可访问级别。
表8-2在表的左边列出了访问修饰符,并在顶部划分出类的类别。派生指类继承声明该成员
的类。非派生指类不继承声明该成员的类。表格单元中对勾的意思是该类别的类可以访问带有相
应修饰符的成员。