2012-04-15 5 views
0

可能性の重複:
Why Explicit Implementation of a Interface can not be public?明示的に実装されたメンバーを公開できないのはなぜですか?

I read this Question。ストレート質問から

interface IRepository<T> 
{ 
    void AddString(); 
} 

interface IStringRepo : IRepository<string> 
{ 
    List<string> GetStrings(); 
} 

public class BLL : IStringRepo 
{ 
    public List<string> FilterStrings() 
    { 
     return new List<string>() { "Hello", "World" }; 
    } 

    public List<string> IStringRepo.GetStrings() 
    { 
     throw new NotImplementedException(); 
    } 

    public void IRepository<string>.AddString() 
    { 
     throw new NotImplementedException(); 
    } 
} 

はなぜ明示的に参照加盟国民はErrorで作っていますか?

+2

'public'修飾子は何をすると思いますか?通常のメソッド名がないので、(通常のC#コードからは)少なくともこのメソッドをインターフェイス経由で呼び出すことができます。 – CodesInChaos

+1

言語仕様はそうそうだから。 – Jon

+0

明示的なインタフェース実装 'public'を行うことができれば、その通常の(暗黙の)インタフェース実装の違いは何でしょうか? – svick

答えて

1

なぜ明示的に参照メンバーを公開作るんは、単に明示的インターフェイスを実装する開発者を強制的に最も人気の理由の一つ想像これは仕様によるものですエラー

です:memeber名前のあいまいさのように、既存のクラスで公開名を公開しています。既存のクラスAPIを変更することはできません。他のシステムでも使用されているため、インターフェースAPI(メンバー名/署名)クラスとインタフェースの両方で同じ名前のメンバが定義されているため、publicインターフェイスメンバーのacces修飾子は、同じ名前のメンバーがすでにクラス内で宣言されているため意味がありません。

MSDN、13.4.1 Explicit interface member implementations

方法 呼び出し、プロパティへのアクセス、またはインデクサアクセスに完全修飾名を介して、明示的なインターフェイス部材 実装にアクセスすることは不可能です。明示的なインターフェイス メンバの実装は、インターフェイス のインスタンスを介してのみアクセスでき、その場合、メンバ名によって単に参照されます。

それはアクセス修飾子を含むように、明示的なインターフェイス部材 実装のコンパイル時エラーであり、修飾子抽象、バーチャル、オーバーライド、または静的を含むようにコンパイル時 エラーです。明示的または暗黙的な - 彼らはパブリックではありませんので、それは一種

あなたは相反なので

-1

あなたはは、他の選択肢その後、公共などのすべてのメンバーを実装する必要があり、それとの契約に署名することによって、それpublic原因を作るのない何らかの理由ありません。

しかし、なぜエラーが生じますか?

なぜなら、単にすべてのインターフェイスメンバーが定義によって公開されているためです。

Interfaces

インタフェースは、メソッド、プロパティ、イベント、インデクサ、またはこれら4つのメンバー型のいずれか 組み合わせからなります。インターフェイスには、 の定数、フィールド、演算子、インスタンスコンストラクタ、デストラクタ、または の型を含めることはできません。静的メンバーを含むことはできません。インターフェイスメンバは が自動的に公開され、アクセス修飾子は含まれません。

+0

@downvoter:説明する気に? – Tigran

+0

@downvoter:ちょうど情熱を説明するか、すぐにまたは後でdownvotingする理由は? – Tigran

0

のいずれかの方法を実装するchoiceを持っています。

明示的な場合は、実装が唯一のインタフェースを介して、公衆(簡体)からそれを隠すための方法でそれにアクセスすることを強制したいので、それは多くの場合、
だ - ので、公開はありません。

つまり、明示的な実装を行う目的の1つです。

関連する問題