如何用父类的父类的虚方法?

qqq123 2003-08-30 03:05:49
public class A
{
public virtual void M(){}
public void N(){}
}
public class B:A
{
public override void M(){ base.M (); }
new public void N(){base.N();}
}
public class C:B
{
public override void M()
{
base.M ();//调用的是B.M()
//如何调用A.M()?
}
new public void N()
{
((A)this).N();
}
}
//不要用这种办法
public class BB:A
{
public new virtual void M(){ base.M();}
new public void N(){base.N();}
}
public class CC:BB
{
public override void M()
{
base.M();
((A)this).M();
}
new public void N(){base.N();}
}
//也不要用这种办法
public class BBB:A
{
public override void M(){ base.M();}
public void AM()
{
base.M();
}
new public void N(){base.N();}
}
public class CCC:BBB
{
public override void M()
{
base.M();
base.AM();
}
new public void N(){base.N();}
}
...全文
176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
virginsoldier 2003-09-06
  • 打赏
  • 举报
回复
我没说她什么都不能做哦!你在调用Base之前的地方家代码不就好啦!
qqq123 2003-09-05
  • 打赏
  • 举报
回复
好方法!!!只是你规定了Parent.A()什么都不能干,这也太...
virginsoldier 2003-09-05
  • 打赏
  • 举报
回复
C#程序不能在子类中直接调用父类的父类的方法。这是由其程序在内存中的排布方式决定的。
如果想使用其方法。也许这样子可以实现。
class ParentofParent
{
public virtual void A()
{
MessageBox.Show( "class ParentofParent " );
}
}

class Parent
{
public override void A()
{
base.A();
}
}

class Children
{
public override void A()
{
base.A();
}
}

没有经过测试,所以也不知道能不能行。仅供参考。
nyucv 2003-09-02
  • 打赏
  • 举报
回复
public override void M()
改成:public new void M()
不行吗??????
qqq123 2003-09-02
  • 打赏
  • 举报
回复
zzz
virginsoldier 2003-09-01
  • 打赏
  • 举报
回复
Up
qqq123 2003-08-30
  • 打赏
  • 举报
回复
zivey(爬山虎) 说的“除非你使用子类实例话变量“ 是什么意思?刚刚接触C#和OO不久对这些术语实在是比较晕,zivey(爬山虎)或哪位知道的网友帮忙给解释一下,谢谢!!!
qqq123 2003-08-30
  • 打赏
  • 举报
回复
Reflection 也可以CodeDom也行Emit ...
qqq123 2003-08-30
  • 打赏
  • 举报
回复
To zivey(爬山虎): 我不太明白您的意思能不能给个具体的例子。
To gujianxin(木头象): 真的没有别的办法了吗?不会把?据我所知还可以这样:
public class AA
{
//将M的功能分解为M1和M2
public virtual void M()
{
this.M1();
this.M2();
}
public virtual void M1(){}
public virtual void M2(){}
}
public class BBBB:AA
{
public override void M()
{
base.M ();
}
}
public class CCCC:BBBB
{
public override void M()
{
base.M ();
//相当与调用了AA.M();
base.M1();
base.M2();
}
}
大家一块总会有比较好的解决方法的^_^
用借口或事件什么的只要达到目的就可以了.
gujianxin 2003-08-30
  • 打赏
  • 举报
回复
那就没有方法了,能用的全被你排除了
BigIcicle 2003-08-30
  • 打赏
  • 举报
回复
父类的虚方法,当用子类override重写后,父类的定义就不再起作用了,除非你使用子类实例话变量。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧