通过接口实例进行继承和方法调用

时间:2011-06-15 15:15:34

标签: c#-4.0

我一直在阅读“C#编程语言。第4版”,并找到了以下代码示例:

interface I<T>
{
    void F();
}
class Base<U>: I<U>
{
    void I<U>.F() {...}
}
class Derived<U,V>: Base<U>, I<V>
{
void I<V>.F() {...}
}
...
I<int> x = new Derived<int,int>();
x.F();

作者声明在调用x.F()之后,将调用Derived中的方法,因为

"Derived<int,int> effectively reimplements I<int>"

我已经用C#4.0编译器检查过,发现这个语句实际上调用了Base中的方法。你能解释一下这种行为吗?

提前致谢。

编辑:这是用于检查的工作代码:

using System;

interface I<T>
{
    void F();
}

class Base<U>: I<U>
{
    void I<U>.F()
    {
        Console.WriteLine("F() in Base");
    }
}

class Derived<U,V>: Base<U>, I<V>
{
    void I<V>.F()
    {
        Console.WriteLine("F() in Derived");
    }
}

public class MainClass
{
    public static void Main()
    {
        I<int> x = new Derived<int,int>();
        x.F();
    }
}

它在Base中输出“F()”,所以我不知道我错在哪里。

2 个答案:

答案 0 :(得分:0)

因为I。

的Base和Derived接口

答案 1 :(得分:0)

void I<V>.F() {...}该方法可以从“Derived”调用/触发,但正在执行接口中定义的方法。

void F();