持つ:
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
では、単に through GetMethod(string)
)。次に、 Type.GetInterfaceMap Methodを使用して、宣言型 (ここでは)で実装するためのInterfaceMapping 構造体オブジェクトを取得する必要があります。そこでは、実際にインターフェイスを実装するメソッドを参照しています。したがって、参照がasと等しいかどうかを確認する必要があるのは、1 つのメソッドのみを宣言する場合だけです。IDisposable
DisposableObject
TargetMethods
m.TargetMethods[0]
IDisposable
MSDN から:
InterfaceMapping 構造体
インターフェイスを実装するクラスの実際のメソッドへのインターフェイスのマッピングを取得します。
型がインターフェイスで指定されたもの以外のメソッド名を使用するインターフェイス メソッドを実装する場合、または型が同じ名前のメソッドを持つ複数のインターフェイスを実装する場合は、InterfaceMapping 構造体を使用します。
InterfaceMapping 構造体を取得するには、Type.GetInterfaceMap メソッドを使用します。
1 つの注意点: クラスが明示的に実装できる場合IDisposable
はm.TargetMethods[0]
、明示的な実装を参照します。したがって、それを取得する方法があるかどうかはわかりません (明示的なインターフェイスを実装するメソッドを見つけるためにリフレクションを使用するをMethodInfo
参照InterfaceMapping
してください)。この状況では、エラーが発生しやすくなる可能性があります。特定の問題について確認してください。