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

本文关键字:类型 覆盖 反射 是否 何检查 检查 方法 | 更新日期: 2023-09-27 18:19:03

可能的重复项:
确定 Equals(( 是否是覆盖?

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

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

在VS中输入typeof(mytype).GetMethod("Equals").给我带来了广泛的选项列表,但没有"IsOverriden"或类似的东西。

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

检查DeclaringType是否typeof(object)

有两种

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

您可以使用绑定标志来发挥自己的优势:

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

那么t当且仅当mytype覆盖Equals时,就不会null