如何确定MethodInfo是否覆盖基本方法

Ral*_*ton 12 .net c# reflection overriding methodinfo

我正在尝试确定我从类型实例上的GetMethod调用获得的MethodInfo对象是由类型还是由它的基类实现的.

例如:

Foo foo = new Foo();
MethodInfo methodInfo = foo.GetType().GetMethod("ToString",BindingFlags|Instance);
Run Code Online (Sandbox Code Playgroud)

ToString方法可以在Foo类中实现.我想知道我是否得到了foo实现?

相关问题

是否可以判断派生类中是否已覆盖.NET虚方法?

Meh*_*ari 20

检查其DeclaringType财产.

if (methodInfo.DeclaringType == typeof(Foo)) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 如果被检查的方法也是抽象方法,这将不起作用。这是[解释](/sf/answers/3189253791/)。 (2认同)

Sal*_*iti 5

代替使用反射,更快的方法是使用委托!特别是在新版本的框架中,运行速度确实很快。

    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;
    }
Run Code Online (Sandbox Code Playgroud)