Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET中引用特定的基类方法?_C#_.net_C# 4.0 - Fatal编程技术网

C# 如何在.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

在.NET中,我试图对第三方库进行修补。我创建了一个新类,孙子,它继承自从父类派生的类子类。在孙子的重写方法中,我需要跳过子对象并调用父对象。可能吗?换句话说,我想做:

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();