2017-05-30 74 views
0

如何在覆盖基类方法时忽略基类方法中的方法调用?像下面的例子一样,执行所有100行代码,并忽略在派生类中调用方法insideMethod1()。有没有办法做到这一点,而无需重复码忽略基类方法中的方法调用

public class A 
virtual method1(){ 
// 100 lines of code 
insideMethod1(); 
} 
public class B : A 
override method1(){ 
// call the 100 lines of code but ignore calling insideMethod1() 
} 
+5

你应该重构你的代码,以便你不需要这样做。 – SLaks

+0

这些重写的方法1中的代码与基类中的100行代码相同吗? –

回答

4

你可以做到这一点正相反 - 覆盖insideMethod1所以它不会做任何事情:

public class A 
{ 
    public void method1() { 
     // 100 lines of code 
     insideMethod1(); 
    } 

    protected virtual void insideMethod1() { /* some work here */ } 
} 

public class B : A 
{ 
    protected override void insideMethod1() { } 
} 

延伸阅读:Template Method Pattern

0

我我不太熟悉C#,但我认为你可以传递一个布尔参数给函数,它决定你是否调用嵌套函数。

public class A 
virtual method1(bool callInsideMethod = true){ 
// 100 lines of code 
if(callInsideMethod) 
    insideMethod1(); 
} 

public class B : A 
override method1(bool callInsideMethod = false){ 
// call the 100 lines of code but ignore calling insideMethod1() 
}