C# 如何在.NET中引用特定的基类方法?
在.NET中,我试图对第三方库进行修补。我创建了一个新类,孙子,它继承自从父类派生的类子类。在孙子的重写方法中,我需要跳过子对象并调用父对象。可能吗?换句话说,我想做:C# 如何在.NET中引用特定的基类方法?,c#,.net,c#-4.0,C#,.net,C# 4.0,在.NET中,我试图对第三方库进行修补。我创建了一个新类,孙子,它继承自从父类派生的类子类。在孙子的重写方法中,我需要跳过子对象并调用父对象。可能吗?换句话说,我想做: public class Grandchild : Child { public void override MyMethod() { // illegal syntax examples, but how can I invoke Parent.MyMethod? base.base.M
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...
}
}
这根本不可能做到,即使经过反思也不行,原因很好——安全 如果您分发的类强制执行一些业务规则,而客户端能够跳过这些规则,那么您可能会遇到一个巨大的安全漏洞。这样的基本多态性规则根本不能被违反 正如Eric Lippert所解释的,安全性也是表达式树不能包含对
base
的引用的原因
//这是非法的
表达式非虚拟调用=()=>base.Method();
您确定继承是您所需要的吗?请参阅:重复问题的答案给出了几种实现方法。没有直接的方法,但可以通过几种变通方法之一实现。
//this is illegal
Expression<Func<string>> nonVirtualCall = () => base.Method();