给定以下代码:
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];
是否可以确定 derivedMethodInfo 是否表示覆盖基类中另一个的方法声明?
在另一个问题中,观察到Method
在基类中已被声明为抽象(且未实现),derivedMethodInfo.DeclaringType 将出现为 Base,这在阅读 @EricLippert 的评论后是有道理的。我注意到在本示例中,由于派生类重新声明了方法,即derivedMethodInfo.DeclaringType == derivedMethodInfo.ReflectedType
,即。衍生的。
baseMethodInfo 和derivedMethodInfo 之间似乎没有任何联系,除了它们的名称相同并且它们各自的声明类型出现在同一个继承链中。有没有更好的方法来建立连接?
我问的原因是,似乎没有办法通过反思来区分前面的例子和下面的例子:
public class Base {
public virtual void Method() { }
}
public class Derived : Base {
public new void Method() { }
}
在这种情况下,Derived 类也声明并反映了一个名为 Method 的成员。