Protected的学习!

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

None.gif 当在声明了某个  protected  实例成员的类的程序文本之外访问该实例成员时,以及当在包含有某个  protected   internal  实例成员声明的程序的程序文本之外访问该实例成员时,要求这种访问发生在该成员所属类的一个派生类的程序文本中,并引用该派生类的一个实例。假定 B 是一个基类,它声明了一个受保护的实例成员 M,而 D 是从 B 派生的类。在 D 的类体中,对 M 的访问可采取下列形式之一: 
None.gif
None.gifM 形式的非限定类型名或初等表达式。 
None.gifE.M 形式的初等表达式(其中,E 是类 D 或是从 D 派生的类)。 
None.gif
base .M 形式的初等表达式。 
None.gif除了上述形式外,派生类还可以在它自已的构造函数
- 初始化器中(第  10.10 . 1  节)访问它的基类的受保护的实例构造函数。
None.gif
None.gif在下面的示例中,
None.gif
None.gif
public   class  A
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   
protected int x;
ExpandedSubBlockStart.gifContractedSubBlock.gif   
static void F(A a, B b) dot.gif{
InBlock.gif      a.x 
= 1;      // Ok
InBlock.gif
      b.x = 1;      // Ok
ExpandedSubBlockEnd.gif
   }

ExpandedBlockEnd.gif}

None.gif
public   class  B: A
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif   
static void F(A a, B b) dot.gif{
InBlock.gif      a.x 
= 1;      // Error, must access through instance of B
InBlock.gif
      b.x = 1;      // Ok
ExpandedSubBlockEnd.gif
   }

ExpandedBlockEnd.gif}

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

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

转载于:https://www.cnblogs.com/fxwdl/archive/2006/10/23/537321.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值