質問

.Net でリフレクションを使用すると、次の違いは何ですか。

   if (foo.IsAssignableFrom(typeof(IBar)))

そして

   if (foo.GetInterface(typeof(IBar).FullName) != null)

どちらがより適切ですか、なぜですか?

どちらか一方が失敗する可能性があるのはどのような場合ですか?

役に立ちましたか?

解決

型が特定のインターフェイスを実装しているかどうかを確認したいだけの場合は、どちらでも問題ありませんが、IsAssignableFrom() は GetInterface() よりも多くの内部チェックを実行するため、おそらく GetInterface() の方が高速です。おそらく、他の両方のメソッドが使用するのと同じ内部リストを返す Type.GetInterfaces() の結果をチェックする方がさらに速くなります。

他のヒント

内部クラスの処理方法には違いがあります。次のクラスを受講してください。

public interface IFoo
{
}    

internal class Foo: IFoo
{
}

これにより、1 つの項目のリストが表示されます。

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.GetInterface(typeof(IFoo).FullName) != null)
            .ToList();

一方、これにより空のリストが得られます。

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.IsAssignableFrom(typeof(IFoo))
            .ToList();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top