2011-09-05 174 views
1

我有基类和执行虚拟方法。我重写派生类中的execute方法。 可以在这样的流程中执行虚拟方法代码吗?c#虚拟方法

  1. 虚拟基础方法的代码执行
  2. 重写方法的代码执行
  3. 虚拟基础方法的代码执行

不知道如果我已经解释了一切很好,但我希望能得到解释我的问题: )

public abstract class ConverterBase 
{ 
     public virtual void Execute() 
{ 
try 
{ 
//1. Base class code  

// 2. Execute overridden method code. 

} 
finally 
{ 
//3. Base class code 
} 
} 
} 

public class Converter : ConverterBase 
{ 
     public override void Execute() 
{ 
//2. code 
} 
} 

回答

9

不,你想template method pattern这里:

public abstract class ConverterBase 
{ 
    public void Execute() 
    { 
     try 
     { 
      // Stuff 
      ExecuteImpl(); 
     } 
     finally 
     { 
      // Stuff 
     } 
    } 

    protected abstract void ExecuteImpl(); 
} 


public class Converter : ConverterBase 
{ 
    protected override void ExecuteImpl() 
    { 
     // Stuff to execute within the parent's try block 
    } 
} 
+0

乔恩,这如何让派生类之前和派生功能后调用基类的方法?这不是OP要求的吗? – Jamiec

+0

@Jon,你的代码有问题。 Converter.ExecuteImpl()永远不会击中ConverterBase.Execute(); – Tomas

+0

@Tomas:这不是意味着 - 这个想法是公共调用者只是调用Execute,它将执行基类中的一些代码,然后是派生类中的一些代码,然后是基类中的最后一部分代码。这不是你想要的吗? –