virtual函数主要是用来应对多态的,所以在override函数里面可以直接调用直接基类的方法,但要调用直接基类的基类可能只有通过实例来实现了,比如:class Base1 { public virtual func() ... }
class Base2 : Base1 { public override func() ... }
class Base3 : Base2 { 
    public override func()
    {
         // 我想在这里调用Base1::func,能否行得通?
         // 试过base.base.func(),编译通不过。
         Base1 b1=new Base1();
         b1.func();         。
    }
}

解决方案 »

  1.   

    flower_open(宫爆鸡丁) :
    直接调用我也估计是不成的。但是确实有这样的需要,有没有间接的办法,比如反射什么的? goodluck001(Endeavoring):
    谢谢,但是那样不符合要求。我希望方法的作用效果是对于Base3本身,而不是另外一个临时的Base1对象。
      

  2.   

    class Base2 : Base1 

    public override func() ... 
    public funD()
    {
    base.func();
    }
    }
    Base2类里写个方法调用基类。。
      

  3.   

    可以的,前提是不要使用virtual。使用下面的四个类,你可以有这样的效果
    Class3 c3=new Class3();
    Class4 c4=new Class4();
    string s3= c3.GetValue();//s3="Class1"
    string s4= c4.GetValue();//s4="Class2"
    --------------------------
    public class Class1
    {
      public Class1(){}
      public string GetValue()
      {
       return "Class1";
       }
    }public class Class2:Class1
    {
      public Class2(){}
      new public string GetValue()
      {
        return "Class2";
      }
    }
    public class Class3:Class2
    {
       public Class3(){}
       new public string GetValue()
       {
         return ((Class1)this).GetValue();
        }
    }
    public class Class4:Class2
    {
       public Class4(){}
       new public string GetValue()
       {
         return ((Class2)this).GetValue();
        }
    }
      

  4.   

    调用基类的基类: ((Base1)this).func();但是如果func()是一个虚函数,就会出现一个死循环,继调用Base1.func(); Base1发现func()是一个虚函数,然后就再调用Base3.func(),Base3.func()再调用Base1.func(); 如果func()不是一个虚函数是可以的
      

  5.   

    看来还是没有说清楚,再明确一下问题的前提:在不改动base1和base2的前提下,让base3调用base1中的虚拟方法。
    如果我能随便修改base1和base2,那么可行的办法多得很,也就没有必要再为这个问题费脑筋了。
      

  6.   

    楼上是强制类型转换啊virtual的估计不行哦
      

  7.   

    啊,我说的是回复人: zjsen(离开中...) ( ) 信誉:98