8

MethodInfo が異なるデリゲート タイプに適合するかどうかを判断するにはどうすればよいですか?

bool IsMyDelegate(MethodInfo method);

編集:私は MethodInfo オブジェクトを与えられており、それがデリゲート インターフェイスに適合するかどうかを知りたいです。明らかなことは別として

    private bool IsValidationDelegate(MethodInfo method)
    {
        var result = false;
        var parameters = method.GetParameters();
        if (parameters.Length == 2 &&
            parameters[0].ParameterType == typeof(MyObject1) &&
            parameters[1].ParameterType == typeof(MyObject2) &&
            method.ReturnType == typeof(bool))
        {
            result = true;
        }
        else
        {
            m_Log.Error("Validator:IsValidationDelegate", "Method [...] is not a ValidationDelegate.");
        }
        return result;
    }
4

1 に答える 1

12

method静的メソッドの場合:

bool isMyDelegate =
  (Delegate.CreateDelegate(typeof(MyDelegate), method, false) != null);

methodインスタンスメソッドの場合:

bool isMyDelegate =
  (Delegate.CreateDelegate(typeof(MyDelegate), someObj, method, false) != null)

(残念ながら、Delegate.CreateDelegate はデリゲート インスタンスをバインドしようとするため、この場合はインスタンスが必要です。ただし、この場合、デリゲートを作成できるかどうかはすべて気にします。)

どちらの場合も、基本的には、MethodInfo から目的の型のデリゲートを作成するように .NET に要求しますが、メソッドのシグネチャが間違っている場合は例外をスローするのではなく、null を返すようにします。次に、null に対してテストすると、デリゲートが正しい署名を持っているかどうかがわかります。

これは実際にデリゲートを作成しようとするため、すべてのデリゲートの差異ルールも処理することに注意してください (たとえば、メソッドの戻り値の型が互換性があるが、デリゲートの戻り値の型と完全に同じではない場合)。

于 2010-02-08T11:17:49.490 に答える