14

特定のメソッドまたはプロパティが特定のインターフェイスから取得され、明示的に実装されているかどうかを判断できる必要があります。
誰かがこれを行ったことがありますか?実際に.NETリフレクションを使用してこの情報を取得することは可能ですか?


アップデート

受け入れられた回答の下のコメントに見られるように、私が実際に達成しようとしているのは、リフレクションを介して特定のインターフェイスを実装するメソッドを呼び出すことです。同じメソッド シグネチャを持つ複数のインターフェイスを持つ可能性があるため、インターフェイスに基づいて呼び出す適切な実装を決定したいと考えました。私のシナリオでは、実装タイプ、インターフェース、およびメソッド名は実行時に決定されるため、私の場合は単純なキャストを使用できません。

4

2 に答える 2

17

C# で明示的に実装されたインターフェイス メソッドは、ターゲット クラスではプライベートです。この事実を利用して、この拡張メソッドを作成して、これらのメソッドのみを返すことができます。

static IEnumerable<MethodInfo> GetExplicitlyImplementedMethods(this Type targetType, 
    Type interfaceType) 
{ 
  return targetType.GetInterfaceMap(interfaceType).TargetMethods.Where(m => m.IsPrivate);
}

注:これは C#専用です。

更新:しかし、あなたの要件から、実装が暗黙的か明示的かを実際に気にせずに、どのメソッドがどのインターフェースメソッドを実装するかだけを知りたいようです。言語間で機能するソリューションの場合、これで十分です。

static IEnumerable<MethodInfo> GetImplementedMethods(this Type targetType,
    Type interfaceType) 
{ 
  return targetType.GetInterfaceMap(interfaceType).TargetMethods;
}
于 2011-07-04T14:32:59.557 に答える