2009-04-17 21 views
13

C#編譯器似乎明確注意到它和它的基類實現的所有接口。 CLI規範說這不是必需的。我見過一些其他編譯器沒有明確地發佈這個,它似乎工作正常。 C#執行此操作有什麼區別或原因嗎?爲什麼C#編譯器顯式聲明一個類型實現的所有接口?

的MSIL的C#在底部產生用於B爲:

.class private auto ansi beforefieldinit B 
     extends A 
     implements IAdvanced, 
        ISimple 

它不應該需要指定ISimple,因爲A一樣IAdvanced實現它。 C#代碼:

interface ISimple { 
    int Basic { get; } 
    int Zero { get; } 
} 
interface IAdvanced : ISimple { 
    string Major { get; } 
} 
class A : ISimple { 
    int ISimple.Basic { 
     get { return 1; } 
    } 
    int ISimple.Zero { 
     get{ return 0;} 
    } 
} 
class B : A, IAdvanced { 
    string IAdvanced.Major { 
     get { return "B"; } 
    } 
} 

回答

7

我不認爲我們可以知道任何明確的答案在這裏,除非我們有編譯器開發人員在下降。然而,我們可以猜測的原因。它可能是:

  1. 優化 - 也許它爲JIT編譯器節省了一些工作。
  2. 爲了便於閱讀 - 使人眼更容易掌握什麼類型實現查看MSIL輸出。
  3. 因爲這是暑期實習生如何實施它,既然它工作正常,沒有人會改變它,以防萬一它破壞了一些東西。
+0

IIRC,一切都在規範中明確定義。所以這裏沒有猜測。 – leppie 2009-04-17 06:39:22

相關問題