Protected的学习!

以前一直没太用过Protected,今天在做例题的时候遇到继承的问题,我就想了一下给Protected赋值的过程,思想上有些乱,就想看看MSDN上关于这个关键子的陈述,看到下面的例题的时候我都不敢相信自己的眼睛了,原来Protected还有这样的特性:下面是MSDN的说明: 

当在声明了某个 protected 实例成员的类的程序文本之外访问该实例成员时,以及当在包含有某个 protected internal 实例成员声明的程序的程序文本之外访问该实例成员时,要求这种访问发生在该成员所属类的一个派生类的程序文本中,并引用该派生类的一个实例。假定 B 是一个基类,它声明了一个受保护的实例成员 M,而 D 是从 B 派生的类。在 D 的类体中,对 M 的访问可采取下列形式之一: 

M 形式的非限定类型名或初等表达式。 
E.M 形式的初等表达式(其中,E 是类 D 或是从 D 派生的类)。 
base.M 形式的初等表达式。 
除了上述形式外,派生类还可以在它自已的构造函数
-初始化器中(第 10.10.1 节)访问它的基类的受保护的实例构造函数。

在下面的示例中,

public class A
{
   
protected int x;
   
static void F(A a, B b) {
      a.x 
= 1;      // Ok
      b.x = 1;      // Ok
   }

}

public class B: A
{
   
static void F(A a, B b) {
      a.x 
= 1;      // Error, must access through instance of B
      b.x = 1;      // Ok
   }

}

在 A 中可以通过 A 和 B 的实例访问 x,这是因为在两种情况下访问都通过 A 的实例或从 A 派生的类发生。但是在 B 中,由于 A 不从 B 派生,所以不可能通过 A 的实例访问 x。

以前一直以为Protected限制的成员只能在继承的类里内部调用,没想到在定义这个类的内部时,对外部的该实例也可以调用其Protected的成员.看来面向对象我理解的还是不好,对对象的构造过程还不太理解,看来要找本专门的书来补充一下这方面的知识了.

posted @ 2006-10-23 15:31  吴东雷  阅读(229)  评论(0编辑  收藏  举报