我一直在阅读“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()”,所以我不知道我错在哪里。
答案 0 :(得分:0)
因为I。
的Base和Derived接口答案 1 :(得分:0)
void I<V>.F() {...}
该方法可以从“Derived”调用/触发,但正在执行接口中定义的方法。
void F();