那就base.base.Printstr()呗,更复杂的情况可以用RTTI
强制类型转换当然是不行的

解决方案 »

  1.   

    不好意思,我写错了,以上CLASS的关系如下:
    public class CSub1:CBase1
    public class CSub2:CSub1
    相信大家都明白我的意思吧。
    用base.base.Printstr也不行呀,还有其他办法吗 ??
      

  2.   

    是吗?
    那用base.base.Printstr的结果是?
      

  3.   

    用base.base.Printstr编译都不通过呀!
      

  4.   

    啊,对对,base应该是个关键字,不能那么用。
    不好意思。
      

  5.   

    刚才我跟我同事研究了一下,我们是用java,c#和java差不多,应该有参考意义。
    我以前还真没有注意到这个问题,这次一探讨发现这个是很难的,
    我想C++可以那么用是C++的语言特性使然,
    而java没有提供这种语言特性,所以只能在某些特殊情况下能够达到这种效果。
    不知道C#是不是提供了类C++的语言特性?
      

  6.   

    9494
    我想这对C#来说是个很大问题,如果不能调用BASE CLASS的VIRTUAL FUNCTION,那看来一个BASE CLASS最多只派生一个子类为宜,不象VC中那样派生N层的子类,不然就无法与最底层的VIRTUAL FUNCTION通讯了。但有一个笨方法来实现以上功能:
    public class CSub2:CSub1
        {
            public CSub2()
            {
            }
            public override void Printstr (System.WinForms.TextBox textbox)
           {
               CBase1 b1=new CBase1();
               b1.Printstr(textbox);        }}
    但这样却失去了面向对象的义意了,写起来也很别扭。还有什么高见?
      

  7.   

    不过我觉得这个不影响面向对象的实现,反而我觉得跨过父类去访问祖先类的method才影响了封装性。