《C#高级编程》里面如是说:接口IJumper{......}类 Class MyJumper:IJumper{......}IJumper ITest;
MyJumper JumperTest = new MyJumper();ITest = JuperTest;书上说ITest可以执行JuperTest中MyJumper中定义而IJuper中没有定义的公共方法,但是我试了一下,如果不类型转换,ITest此时不能执行MyJumper中定义而IJuper中没有定义的公共方法,与书上所说不一致,这是什么原因呢?

解决方案 »

  1.   

    什么书上这么说的?
    不进行类型转换不能调用MyJumper中定义而IJumper中没有定义的公共方法
      

  2.   

    个人理解是这样的:书上说得没有错,只是没有说清楚,它只是说可以执行,但没有说在什么情况下可以执行,而恰恰是需要类型转换之后才能执行MyJumper中定义而IJuper中没有定义的公共方法。
    我写了下面的程序来验证,如果不转换的话,不要说执行了,编译也无法通过:namespace MyTtest
    {
    interface IJumper
    {
    void a();
    } class MyJumper : IJumper
    {
    void IJumper.a()
    {
    Console.WriteLine("a");
    }
    public void b()
    {
    Console.WriteLine("b");
    }
    } class a
    {
    static void Main()
    {
    IJumper ITest;
    MyJumper JumperTest = new MyJumper(); ITest = JumperTest;                           //ITest.b();    compiletime error
    ((MyJumper)ITest).b();
    }
    }
    }
      

  3.   

    一个接口可从一个或多个基接口继承。在下例中,接口 IMyInterface 从两个基接口 IBase1 和 IBase2 继承:interface IMyInterface: IBase1, IBase2
    {
       void MethodA();
       void MethodB();
    }MSDN中的文字。
    链接:ms-help://MS.MSDNQTR.2003FEB.2052/csref/html/vcrefTheInterfaceType.htm
    版本:VS.NET 2003 MSDN
      

  4.   

    回复人: Tony_lau111082(刘寓) ( ) 信誉:99  2005-10-13 15:19:00  得分: 0  
    谁说接口不可以被继承了?
    --------------------------谁又说接口 可以被继承了?
      

  5.   

    应该是Class不能Inherits Interface
    sorry,上下文没说清楚,看看楼主原文。
      

  6.   

    ITest = JuperTest;意思是ITest持有JuperTest的引用,它们此时指向了同一个类实例。但是,由于ITest是一个IJuper,类型安全机制不允许它访问MyJuper里有而IJuper里没有定义的函数,所以ITest的函数入口表里没有上面提到的函数的入口指针。但当进行了强制转换后,这些函数的入口指针被填入ITest的函数入口表,所以…………
      

  7.   

    多谢 rzpc(淡蓝色)指正,这里的确是实现。但是接口也是可以被继承的。
      

  8.   

    ITest = JuperTest;意思是ITest持有JuperTest的引用,它们此时指向了同一个类实例。但是,由于ITest是一个IJuper,类型安全机制不允许它访问MyJuper里有而IJuper里没有定义的函数,所以ITest的函数入口表里没有上面提到的函数的入口指针。但当进行了强制转换后,这些函数的入口指针被填入ITest的函数入口表,所以…………同意此看法!