This questionとEric Lippert's answerどうすればいいですか?インターフェイスのメソッドを実装するときに明示的または暗黙的な実装を使用するかどうかを決定しますか?インターフェイスメンバーを明示的にまたは暗黙的に実装する必要がありますか?
8
A
答えて
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の一部としてそれらを公開したくない場所
ポール
1
明示的なインターフェイスのための別のケースです。
関連する問題
- 1. 明示的インタフェース実装への暗黙インターフェイス実装のリファクタリング
- 2. インターフェイスデザイン - 明示的または暗黙的な包含
- 3. DateTimeから暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙変換に変換することができません
- 4. 暗黙的対明示的なインタフェース
- 5. 暗黙的または明示的なコードブロックを使用する場合
- 6. なぜ明示的にスレッドに参加する必要がありますか?
- 7. 明示的にRESULT_CANCELEDに設定する必要がありますか?
- 8. 明示的なInterface実装で、同じ名前の暗黙的なプロパティを参照できますか?
- 9. 暗黙と明示の両方のインタフェースを実装するのは意味がありますか?
- 10. Shortオブジェクトを明示的に作成する必要はありませんか?
- 11. 'fb:app_id'プロパティを明示的に指定する必要があります。
- 12. 明示的に完了するまで、TransactionScopeは暗黙的に適用されますか?
- 13. mysqlで明示的にDROP VIEWを行う必要がありますか?
- 14. C#インターフェイスの暗黙実装と明示実装の違い
- 15. mod_rewriteは `Alias`を自動的に設定しますか、` RewriteBase`を実行するときに明示的に指定する必要がありますか?
- 16. は、暗黙的に
- 17. リポジトリにUnitOfWorkを実装する必要がありますか?
- 18. "ON"にした後に明示的に "SET IDENTITY_INSERT [Table] OFF"する必要がありますか?
- 19. AnimationDidStopには、暗黙的なアニメーションのanimationDidStartの対応がありますか?
- 20. パフォーマンスのためにBlockingQueue.take()でスレッドを明示的にスリープ解除する必要がありますか?
- 21. どちらが良い、暗黙的または明示的な結合ですか?
- 22. 暗黙のスーパーコンストラクタobject()は未定義です。明示的に別のコンストラクタを呼び出す必要があります
- 23. 暗黙的で明示的な関係を持つ多対多
- 24. 暗黙的/明示的な結合の違いは何ですか?
- 25. が暗黙的に型「System.Collections.Generic.HashSet」
- 26. IConvertible Vs.暗黙的/明示的な演算子型変換?
- 27. Doctrine 2トランザクションの境界設定:暗黙的対明示的
- 28. 明示的代入と暗黙的代入
- 29. Perl6:暗黙的および明示的なインポート
- 30. 明示的および暗黙的なXML名前空間
これが該当する場合がありますか? – jasonh
Webデベロッパークラスがウェブ上でサービスを提供するように設計されている場合、他の状況(ローカル)で使用されないセキュリティインタフェースでの身元確認のためのメソッドがあるかもしれません。これは私がよく無視すると思うC#の機能を少し知っています。そこに他の例? – Paul