1. ホーム
  2. c#

[解決済み] C#のインターフェイス。暗黙の実装と明示の実装

2022-03-15 04:11:21

質問

インターフェイスの実装の違いは何ですか? 暗黙のうちに 明示的に をC#で使うか?

implicit を使うべきときと explicit を使うべきときとは?

どちらか一方に長所や短所があるのでしょうか?


マイクロソフトの公式ガイドライン(初版より フレームワーク設計ガイドライン には次のように書かれています。 明示的な実装の使用は推奨されません。 予期せぬ動作をすることがあるからです。

このガイドラインは非常に IoC以前の時代には有効 インターフェイスとして物事を渡さない場合。

その点についても、どなたか触れてください。

解決方法は?

暗黙の了解 は、クラスのメンバを介してインターフェイスを定義する場合です。 明示的 は、クラス内のメソッドをインターフェイスで定義する場合です。分かりにくく聞こえるかもしれませんが、以下のようなことです。 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.

explicitは主に実装をすっきりさせるため、あるいは2つの実装が必要なときに使います。それとは関係なく、私はほとんど使いません。

explicit を使用する/使用しない理由は、他の人が投稿してくれると思いますが、もっとたくさんあると思います。

をご覧ください。 次の記事 このスレッドで、それぞれの優れた理由を紹介しています。