18

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

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

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

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

どちらかが失敗するのはいつですか?

4

2 に答える 2

14

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

于 2008-09-19T04:55:40.223 に答える