如何检查方法是否在类型中被覆盖?反思C#

时间:2011-12-27 16:33:22

标签: c# reflection override

  

可能重复:
  Determine if Equals() is an override?

我需要运行特定代码片段,以确定特定类型是否覆盖Object.Equals

如何检查类型是否会覆盖此方法?

在VS中输入typeof(mytype).GetMethod("Equals").为我提供了一系列选项,但没有“IsOverriden”或类似内容。

3 个答案:

答案 0 :(得分:1)

检查DeclaringType是否为typeof(object)

答案 1 :(得分:1)

有两种方法,首先MethodInfo类有一个DeclaringType,您可以使用它来查看它是否为System.Object。其次,您可以使用接受GetMethod枚举的BindingFlags重载,并传入DeclaredOnly以确保您不会获得任何父对象。

答案 2 :(得分:0)

您可以使用绑定标志:

var t = typeof(mytype).GetMethod(
            "Equals",
            BindingFlags.Public |
            BindingFlags.Instance |
            BindingFlags.DeclaredOnly
        );

当且仅当t覆盖null时,mytype才会Equals