2009-12-03 19 views

答えて

8

(個人的に)私は、同じシグネチャを持つメソッド間に衝突がある場合にのみ、明示的な実装の必要性を見ています。

たとえば、IEnumerable<T>を実装する場合、戻り値の型を除いて同じシグネチャを持つ2つのメソッドGetEnumerator()を実装する必要があります。だから、明示的IEnumerable.GetEnumerator()を実装する必要があります:あなたは方法が唯一のインタフェースを介して、オブジェクトインスタンスを介して呼び出されたくない場合は

public abstract class MyClass<T> : IEnumerable<T> 
{ 
    public IEnumerator<T> GetEnumerator() 
    { 
     return ...; 
    } 

    IEnumerator IEnumerable.GetEnumerator() // explicit implementation required 
    { 
     return GetEnumerator(); 
    } 
} 

明示的な実装のための別の用途があります。私は個人的にはこれがあまり意味がないと思うが、非常にまれなケースでは、それが役に立つかもしれない。

3

フィリップの答えは実用的ですが、建築上の考慮事項もあります。

インターフェイスは、他のオブジェクトによって消費されるようにクラスを互換性を持たせるために使用されます。オブジェクトを消費するオブジェクトだけがインタフェースの機能を必要とする場合は、最小限の特権の原則によって制限する必要があります。そのインタフェースメソッドをそのクラスの他のすべてのユーザに公開する必要がない場合。オブジェクトが内部オブジェクトからのコールを受け入れるためのインタフェースを実装する必要がありますが、あなたはあなたのAPIの一部としてそれらを公開したくない場所

ポール

+0

これが該当する場合がありますか? – jasonh

+0

Webデベロッパークラスがウェブ上でサービスを提供するように設計されている場合、他の状況(ローカル)で使用されないセキュリティインタフェースでの身元確認のためのメソッドがあるかもしれません。これは私がよく無視すると思うC#の機能を少し知っています。そこに他の例? – Paul

1

明示的なインターフェイスのための別のケースです。

関連する問題