私はC#アプリケーションを持っています。多くの子クラスを持つ親クラスがあります。私はそれにいくつかのロジックを持つ親クラスのメソッドが欲しいとカスタムロジックが各子クラスによって追加されたので、任意の子クラスがメソッドを呼び出すと、親クラスで定義されたいくつかのコードを実行し、子クラスで定義されているようにカスタマイズされた部分を実行します。これはできますか?そうでない場合、この種のコード実行を達成する最良の方法は何ですか?継承されたロジックとカスタムロジックを継承したC#継承メソッド - これは可能ですか?
0
A
答えて
2
これを達成する方法の1つは、基本クラスで定義されたコードを実行し、次にこのように子クラスがオーバーライドできる(または必要とする)保護されたメソッドを呼び出す非仮想メソッドをエントリポイントとして定義することです。
abstract class Foo
{
public void Bar()
{
// some code defined in the parent class
BarCore(); // the customized part of it as defined in the child class
}
protected virtual void BarCore() { }
}
3
はい、これは、基本クラスに仮想メソッドを定義し、カスタムロジックを "プラグイン"する必要がある場所で "ペイロード"メソッドから呼び出すことで実行できます。あなたのクラス階層の
abstract class MyBase {
protected abstract void CustomLogic(); // Subclasses implement this
public void PayloadMethod() {
... // Do somethig
CustomLogic();
... // Do something else
}
}
class Derived1 : MyBase {
protected override void CustomLogic() {
... // Custom logic 1
}
}
class Derived2 : MyBase {
protected override void CustomLogic() {
... // Custom logic 2
}
}
class Derived3 : MyBase {
protected override void CustomLogic() {
... // Custom logic 3
}
}
クライアントはDerivedN
クラスのいずれかをインスタンス化し、その呼び出しの一部としてCustomLogic
を呼び出すPayloadMethod()
を呼び出します。このメソッドの抽象を行うことが一般的です。
この手法は、Template Method Patternと呼ばれています。
1
これを達成する最も簡単な方法は、二つの方法持っていることです:あなたはなど、デリゲート、抽象メソッドを持つことができ
class BaseClass
{
public void DoSomething()
{
// base class code
// derived class code, modifiable by the derived class
this.DoItSpecificallyForThatDerivedClass();
}
protected abstract void DoItSpecificallyForThatDerivedClass();
}
public class ADerivedClass : BaseClass
{
protected override void DoItSpecificallyForThatDerivedClass()
{
// code specific to this instance and/or class
}
}
関連する問題
- 1. パイソン - 継承されたメソッド
- 2. テンプレートを継承した継承継承メンバ
- 3. @継承されたアノテーションは継承されていません
- 4. 継承したクラスを継承する
- 5. Javadocのメソッドと継承されたメソッド
- 6. 継承されたクラスはネストされたクラスを継承しますか?
- 7. 継承:親ポインタから継承したメソッドを使用する
- 8. C++の多重継承ロジック
- 9. クラス継承とインターフェイス継承
- 10. 継承したクラスの戻り値の型を持つ継承されたメソッド
- 11. 継承されたオブジェクトを継承するノードjs(enum)
- 12. C++多重継承/仮想継承
- 13. C#継承継承でbaseまたはthisを使用する
- 14. 継承されたメンバを非表示に継承
- 15. BuildManager継承の継承
- 16. 継承 - ターゲット固有の継承クラスC#
- 17. GWT継承されたモジュール
- 18. 継承された属性
- 19. 継承されたテキストデコレーションスタイル
- 20. 継承されたオブジェクト
- 21. データ継承の継承
- 22. Entity Frameworkとの継承継承
- 23. スカラのコンストラクタ、ロジックと継承
- 24. 継承された静的メソッド
- 25. カスタム属性クラスは継承されたAttributeUsageフラグを継承しますか?
- 26. 継承:メソッド
- 27. java継承メソッド
- 28. UML - クラス継承、あなたは何を継承しますか?
- 29. C++テンプレートクラスと継承
- 30. 反復子継承と継承* this
を –
あなたは ')(base.Method'も呼び出すことができます子クラスの 'Method()'から削除します。 – itsme86
@ DanielA.Whiteあなたは何を意味するのか説明できますか? – Marathon55