在.NET中我试图修补第三方库。我创建了一个新类Grandchild,它继承自Parent派生的类Child。在Grandchild的覆盖方法中,我需要跳过Child并调用Parent。那可能吗?换句话说,我想做:
public class Grandchild : Child {
public void override MyMethod() {
// illegal syntax examples, but how can I invoke Parent.MyMethod?
base.base.MyMethod(); // nope...
Parent.MyMethod(); // nope...
}
}
答案 0 :(得分:6)
这根本无法完成,甚至不能用反射,并且出于一个很好的理由 - 安全。
如果您分发的类强制执行某些业务规则,并且客户端能够跳过这些规则,则可能会遇到巨大的安全漏洞。这种基本的多态性规则根本不能违反。
安全性也是表达式树不能包含对base
的引用的原因,正如Eric Lippert here所解释的那样。
//this is illegal
Expression<Func<string>> nonVirtualCall = () => base.Method();