【发布时间】:2013-07-13 04:58:54
【问题描述】:
给定以下代码:
public class Base {
public virtual void Method() { }
}
public class Derived : Base {
public override void Method() { }
}
...
var baseMethodInfo = typeof(Base).GetMember("Method")[0];
var derivedMethodInfo = typeof(Derived).GetMember("Method")[0];
是否可以确定派生方法信息是否表示覆盖基类中另一个的方法声明?
在another question 中,观察到如果Method 在基类中被声明为抽象(并且未实现),那么derivedMethodInfo.DeclaringType 将出现为Base,这在阅读@EricLippert 的cmets 之后是有意义的。我注意到在本示例中,由于派生类重新声明了该方法,即derivedMethodInfo.DeclaringType == derivedMethodInfo.ReflectedType,即。派生的。
baseMethodInfo 和 derivedMethodInfo 之间似乎没有任何联系,除了它们的名称相同并且它们各自的声明类型出现在同一个继承链中。有没有更好的连接方式?
我问的原因是,似乎没有办法通过反思来区分前面的例子和下面的例子:
public class Base {
public virtual void Method() { }
}
public class Derived : Base {
public new void Method() { }
}
在这种情况下,Derived 类也声明并反映了一个名为 Method 的成员。
【问题讨论】:
-
GetBaseDefinition()应该区分这两种情况,我猜。 -
@JeppeStigNielsen:是的;这是一个更好的答案。
-
@JeppeStigNielsen:你完全正确。我错过了它,因为我使用的是 MemberInfo 而不是 MethodInfo。如果你把它变成答案,我会接受!
标签: c# reflection polymorphism