Я читал "Язык программирования 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. Можете ли вы объяснить такое поведение?
Заранее спасибо.
edit: вот рабочий код, используемый для проверки:
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();
}
}
Он выводит "F () в Base", поэтому я не знаю, где я не прав.