假设我有一个基类 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/