I'm trying to determine if the MethodInfo object that I get from a GetMethod call on a type instance is implemented by the type or by it's base.
For example:
Foo foo = new Foo();
MethodInfo methodInfo = foo.GetType().GetMethod("ToString",BindingFlags|Instance);
the ToString method may be implemented in the Foo class or not. I want to know if I'm getting the foo implementation?
Related question
Is it possible to tell if a .NET virtual method has been overriden in a derived class?
Check its DeclaringType
property.
if (methodInfo.DeclaringType == typeof(Foo)) {
// ...
}
Instead of using reflection a much faster way is to use delegates! Especially in the new version of the framework the operation is really fast.
public delegate string ToStringDelegate();
public static bool OverridesToString(object instance)
{
if (instance != null)
{
ToStringDelegate func = instance.ToString;
return (func.Method.DeclaringType == instance.GetType());
}
return false;
}
You'll want to look at the DeclaringType property. If the ToString method comes from Foo, then the DeclaringType will be of type Foo.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With