2013-05-10 2 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

Это лучшее решение, потому что 'protected abstract 'не позволяет пользователю API ссылаться только на конкретную реализацию. – Aphelion

0

я думаю, что ур ищет

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

public class Child : Base { 
{ 
    public override void execute() { 
     //'Some child specific code' 
    } 
} 
Смежные вопросы