以前一直没太用过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 on 2006-10-23 15:31
毁于随 阅读(50)
评论(0) 编辑 收藏 所属分类:
C# 编程经验