2013-05-10 124 views
0
public abstract class Base { 
    public void execute() { 
     //'preexecute code' 
     child.execute(); 
     //'postexecute code' 
    } 
} 

public class Child : Base { 
{ 
    public void execute() { 
     //'Some child specific code' 
    } 
} 

在C#中是否有任何方式來支持像上面那樣從基類中調用子類中的函數的執行模型。 「預先執行代碼」和「後執行代碼」很常見,每次調用「execute」時都應該運行。C#繼承封裝代碼

回答

10

我建議你從基地(被稱爲Template Method Pattern)調用的抽象方法:

abstract class Base { 
    void Foo() { 
    DoSomething(); 
    Bar(); 
    DoSomethingElse(); 
    } 

    protected abstract void Bar(); 
} 

class Child : Base { 
    protected override void Bar() { 
    DoSomethingChildSpecific(); 
    } 
} 

您可以實現一個非常具體的部分在Bar原始操作Template Method Pattern),並且Base在正確的上下文中調用它。因此,消費者不能搞亂執行順序Foo,不像它們能夠覆蓋Foo本身。

+0

這是最好的解決方案,因爲受保護的抽象可以防止API用戶只調用特定的實現。 – Aphelion 2013-05-10 08:43:47

0

我覺得你找

public abstract class Base { 
    public abstract void execute(); 
} 

public class Child : Base { 
{ 
    public override void execute() { 
     //'Some child specific code' 
    } 
}