-1
我一直在讀「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();
作者指出,調用xF的()之後的在派生方法將被調用,因爲
"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();
}
}
輸出「F()的基地」,所以我不知道我錯了。
我想你檢查錯了。 – jbtule 2011-06-15 15:37:56
我編輯了我的問題以顯示我是如何執行檢查的。 – Anonymous 2011-06-15 15:50:57
我不知道你在用什麼編譯器,因爲輸出「F()in Derived」 – jbtule 2011-06-15 16:07:14