如何在.net中引用特定的基类方法?

本文关键字:基类 类方法 引用 net | 更新日期: 2023-09-27 18:01:21

在。net中,我正在尝试对第三方库进行猴子补丁。我创建了一个新类,Grandchild,它继承了从Parent派生的类Child。在孙子的重写方法中,我需要跳过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...
    }
}

如何在.net中引用特定的基类方法?

这是根本做不到的,即使有反射也不行,而且有一个很好的理由——安全。

如果你分布的类强制执行了一些业务规则,而客户端能够跳过这些规则,那么你可能会遇到一个巨大的安全漏洞。这种基本的多态性规则是不能违反的。

安全性也是表达式树不能包含对base引用的原因,Eric Lippert在这里解释了这一点。

//this is illegal
Expression<Func<string>> nonVirtualCall = () => base.Method();