2009-04-18 12 views
0

.NETの特定の型(クラスまたはインタフェース)で実装されているインタフェースをどのように反映できますか?C#のタイプのインタフェースを反映する

反映されている型は(実装の意味と意味の意味の両方で)汎用であるため、アセンブリ名をハードコードする必要はありませんが、この名前を取得できることはわかりますが指定された型のTypeクラスから取得します。

答えて

1

Call Type.GetInterfaces()。

+0

これは簡単すぎるでしょう;)ありがとう。 – johnc

1

Type.GetInterfaces()はと宣言されたインターフェイスのみを取得します(これについては、MSDNに説明が必要です)。継承されたインターフェイスを取得するには、自分で作業を行う必要があります。似た何か:それはストレート離れる-DA-ボックスをコンパイルしていない場合

 

using System; 
using System.Linq; 

public static IEnumerable<Type> GetAllInterfacesForType(this Type type) 
{ 
    foreach (var interfaceType in type.GetInterfaces()) 
    { 
     yield return interfaceType; 
     foreach (var t in interfaceType.GetAllInterfacesForType()) 
      yield return t; 
    } 
} 


public static IEnumerable<Type> GetUniqueInterfacesForType(this Type type) 
{ return type.GetAllInterfaces().Distinct(); } 

 

私はカフオフとても残念これを書きました。

+0

これは正しいとは思わない。 型:array []()[] 現在のTypeで実装または継承されているすべてのインターフェイスを表すTypeオブジェクトの配列です。 – tylerl

+0

MSDNが正しい。 GetInterfacesは、基底型から継承されたインタフェースと、手元の型で宣言されたインタフェースを返します。 – itowlson

+0

もう一度、自分で試してみるまで私を信じるつもりはありませんが、それでもクラスに宣言されている人だけです。 MSDNのその記事へのコメントを読んでください。 –

関連する問題