有:
class DisposableObject : IDisposable
{
public void Dispose()
{
//...
}
}
你可以做:
Type t = typeof(DisposableObject);
InterfaceMapping m = t.GetInterfaceMap(typeof(IDisposable));
MethodInfo mi = t.GetMethod("Dispose");
Console.WriteLine(mi == m.TargetMethods[0]); //true
所以,我想你的课堂上有MethodInfo
for someDispose
方法(这里mi
,简单地通过GetMethod(string)
)。然后,您需要通过Type.GetInterfaceMap Method为声明类型(此处)中的实现获取一个InterfaceMapping Structure对象。在那里你引用了真正实现接口的方法。所以,我们只需要检查你的引用是否等于as声明了一个方法。IDisposable
DisposableObject
TargetMethods
m.TargetMethods[0]
IDisposable
来自 MSDN:
接口映射结构
检索接口到实现该接口的类的实际方法的映射。
当一个类型实现的接口方法使用的方法名称不是由接口指定的方法名称时,或者当一个类型实现具有同名方法的多个接口时,使用 InterfaceMapping 结构。
要获取 InterfaceMapping 结构,请使用 Type.GetInterfaceMap 方法。
一句话:如果您的类可以IDisposable
显式实现,那么m.TargetMethods[0]
将引用显式实现。所以,我不确定是否有任何方法可以得到它MethodInfo
(InterfaceMapping
参见使用反射查找实现显式接口的方法)。这种情况可能容易出错。检查您的具体问题。