2017-09-05 9 views
0

に私はクラスを持っている:の継承は、C#

public abstract BaseClass 
{ 
    public RequestType MethodOne(Request request) 
    { 
     // some work here with objectOne 
     return PostMethodOne(objectOne); 
    } 
    public abstract RequestType PostMethodOne(Request request); 
} 

は、私は基本クラスからihnerit:

public class ChildClass : BaseClass 
{ 
    public override PostMethodOne(Request request) 
    { 
    // some work with request 
     return request; 
    } 
} 

methodOneはと呼ばれ、それがされた後、私はPostMethod上の要求で作業することができますmethodOneに行った? 私はbase.MethodOneを呼び出す必要がありますか?

+4

ご質問をもう少し明確にしていただけますか、私はそれを理解していませんか? –

+3

あなたはそれを自分で試してみませんか? – Atlasmaybe

+0

これはテンプレートメソッドパターンと呼ばれ、完全にうまくいきます。あなたの質問は何ですか? –

答えて

6

MethodOneは、抽象的でも仮想的でもないため、単にChildClassによって継承されます。

POstMethodOneは抽象的なものなので、ChildClassに実装する必要があります。これをやって、発信者:

var myInstance = new ChildClass(); 
myInstance.MethodOne(); 

が順番にPostMethodOneを呼び出しBaseClassからMethodOneを呼び出します - これは抽象的でChildClassに実装されている - 自動的に呼び出されます。

This is a pretty common patternとなる可能性があります。POstMethodOneはおそらくprotectedではなく、publicである必要があります。

+0

呼び出し側は、Productと適切な子クラスを一致させるファクトリです。 したがって、ファクトリが子クラスを指している場合、要求はMethodOneからエンチャントされますか? – dioannou

+0

@dioannou私は質問を理解していません。 「魅惑的」とはどういう意味ですか? – Jamiec

+0

私は質問を再入力しました。 – dioannou