C# でインターフェイスを暗黙的に実装する場合と明示的に実装する場合の違いは何ですか?
暗黙的と明示的のどちらを使用すべきでしょうか?
どちらか一方に長所や短所はありますか?
Microsoftの公式ガイドライン(初版より)フレームワーク設計ガイドライン) では、明示的な実装を使用するとコードに予期しない動作が生じるため、明示的な実装の使用は推奨されないと述べられています。
このガイドラインは、インターフェースとして物事を渡さない、IoC 以前の時代には非常に有効だと思います。
その点についても触れていただける方はいらっしゃいますか?
ベストアンサー1
暗黙的とは、クラスのメンバーを介してインターフェースを定義することです。明示的とは、インターフェース上のクラス内のメソッドを定義することです。わかりにくいかもしれませんが、私が言いたいのは、IList.CopyTo
次のように暗黙的に実装されるということです。
public void CopyTo(Array array, int index)
{
throw new NotImplementedException();
}
明示的には次のように記述します。
void ICollection.CopyTo(Array array, int index)
{
throw new NotImplementedException();
}
違いは、暗黙的な実装では、インターフェイスをそのクラスおよびインターフェイス自体としてキャストすることで、作成したクラスを通じてインターフェイスにアクセスできることです。明示的な実装では、インターフェイス自体としてキャストすることによってのみインターフェイスにアクセスできます。
MyClass myClass = new MyClass(); // Declared as concrete class
myclass.CopyTo //invalid with explicit
((IList)myClass).CopyTo //valid with explicit.
私は主に、実装をきれいに保つため、または 2 つの実装が必要な場合に、明示的な方法を使用します。いずれにしても、私はほとんど使用しません。
他の人が投稿する、explicit を使用する/使用しない理由は他にもあるはずです。
を参照してください次の記事それぞれの背後にある優れた理由については、このスレッドをご覧ください。