2011-06-15 147 views
-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()的基地」,所以我不知道我錯了。

+0

我想你檢查錯了。 – jbtule 2011-06-15 15:37:56

+0

我編輯了我的問題以顯示我是如何執行檢查的。 – Anonymous 2011-06-15 15:50:57

+1

我不知道你在用什麼編譯器,因爲輸出「F()in Derived」 – jbtule 2011-06-15 16:07:14

回答

0

由於兩個基類和派生接口從I.

0

void I<V>.F() {...}該方法可以被稱爲/觸發從「派生」,但是在執行在接口中定義的方法。

void F();