如果Type
实现(或继承实现)接口和该接口的MethodInfo
方法,我如何使用反射来确定将调用哪个方法?
考虑以下课程:
using System;
public class A : IDisposable {
public virtual void Dispose() { Console.WriteLine("A.Dispose"); }
}
public class B : A {
public new virtual void Dispose() { Console.WriteLine("B.Dispose"); }
}
public class C : A, IDisposable {
public new virtual void Dispose() { Console.WriteLine("C.Dispose"); }
}
public class D : A, IDisposable {
void IDisposable.Dispose() { Console.WriteLine("D.IDisposable.Dispose"); }
}
public class Program
{
public static void Main()
{
((IDisposable)new A()).Dispose(); // A.Dispose
((IDisposable)new B()).Dispose(); // A.Dispose
((IDisposable)new C()).Dispose(); // C.Dispose
((IDisposable)new D()).Dispose(); // D.IDisposable.Dispose
}
}
我想我可以对最衍生的方法进行蛮力搜索
newslot
方法它将成为一个复杂的角落案例列表,很难做到正确,更不用说它会错过使用TypeBuilder.DefineMethodOverride
创建的无关名称的覆盖。
有更好的方法吗?