假设我有一个基类 TestBase,我在其中定义了一个虚拟方法 TestMe()

class TestBase
{
    public virtual bool TestMe() {  }
}

现在我继承了这个类:
class Test1 : TestBase
{
    public override bool TestMe() {}
}

现在,使用反射,我需要查找 TestMe 方法是否已在子类中被覆盖 - 可能吗?

我需要它做什么 - 我正在为“对象”类型编写一个设计器可视化工具,以显示整个继承层次结构,并显示哪些虚拟方法在哪个级别被覆盖。

最佳答案

给定类型 Test1 ,您可以确定它是否有自己的实现声明 TestMe :

typeof(Test1).GetMethod("TestMe").DeclaringType == typeof(Test1)

如果声明来自基类型,则这将评估为 false。

请注意,由于这是测试声明,而不是真正的实现,如果 Test1 也是抽象的并且 TestMe 是抽象的,这将返回 true,因为 Test1 将有自己的声明。如果要排除这种情况,请添加 && !GetMethod("TestMe").IsAbstract

关于c# - 使用反射 (C#) 检测方法是否被覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2932421/

10-13 06:52