具体问题如下:class A{  protected virtual void fun1(){}
};
class B:A{ protected override void fun1(){
     // do override code
 }
}
现在是class C:B{
  protected void fun2(){
      // 在这里想调用A的fun1的功能,想屏蔽调B重写的fun1功能
  }
};问怎么处理?谢谢!

解决方案 »

  1.   

    class A{  protected void fun1(){}
    };
    class B:A{ protected new void fun1(){}
    }
    class C:B{
      protected void fun2(){
         base.base.fun1(); // 在这里想调用A的fun1的功能,想屏蔽调B重写的fun1功能
      }
    };
      

  2.   

    恐怕不行了吧。如果真是这样子,还不如做成如下呢。public class C
    {
       public C()
      {
      }
      private A a;  protected void fun2()
      {
       if(a == null)
         a = new A();
       a.fun1();
      }
    }
      

  3.   

    没有 base.base.fun1(); 这一说法。
      

  4.   

    class A
    { protected void fun1()
    {
    Console.WriteLine("a");
    }
    };
    class B:A
    { protected new void fun1()
    {
    Console.WriteLine("b");
    } protected void funA1()
    {
    base.fun1();
    }
    }
    class C:B
    {
    public void fun2()
    {
    base.funA1(); // 在这里想调用A的fun1的功能,想屏蔽调B重写的fun1功能
    }
    };
      

  5.   

    没法的,因为virtual实现就是按照最近的那个实现,由于c继承b所以实现是实现b的fun1
      

  6.   

    using System;namespace ConsoleApplication1
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    /// 
    class class1
    {
    protected void PutStr()
    {
    Console.WriteLine("base base method!!!!!");
    }
    }
    class class2:class1
    {
    public class2()
    {

    }

    } class class3 : class2
    {
    public class3()
    {
    base.PutStr();
    }
    } class Class
    {
    [STAThread]
    static void Main(string[] args)
    {
              class3 c3 = new class3();
    }
    }}
      

  7.   

    class class3 : class2
    {
    public class3()
    {
    base.PutStr();
    }
    }这里的base直接指的是 "父类的父类"
      

  8.   

    如果父类中没有改写父类的父类中的该方法,则用base.Method()调用的就是父类的父类中的该方法
    如果父类中改写了父类的父类中的该方法,则无法直接调用父类的父类中的该方法
      

  9.   

    如果 A, B 都不可以被修改,那么只能从 A 继承,不要从B继承如果A,B 能被修改,那么就修改一下 A,B 的代码