2009-04-17 3 views
13

C#コンパイラは、すべてのインターフェイスとその基本クラスが明示的に記述されているようです。 CLIの仕様では、これは必要ではないと言われています。私はいくつかのコンパイラがこれを明示的に発行していないのを見てきました。 C#がこれを行うのに違いがあるのでしょうか?底部のC#はBのために生成するC#コンパイラは、型が実装するすべてのインタフェースを明示的に宣言するのはなぜですか?

MSILである:

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

それはIAdvancedが行うようにAがそれを実現するため、ISimpleを指定する必要はありません。 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

+0

私は3番ドアに行きます! ;-) – peSHIr

+0

さて、CLI仕様のパーティションIIは、それが必須ではないことを明確にしています。私はそれが実際に何かを追加すると言ったかどうかは分かりませんでした。 – MichaelGG

関連する問題