私は基底クラスを持っています。BaseClass
ここにあります。そして、派生クラスは2つ、例えばClassA
とClassB
です。また、抽象メソッドFoo()
はBaseClass
で定義されています。両方の派生クラスはFoo()
の実装を提供する必要があります。派生クラスのインターフェイスを実装するか、ベースメソッドをオーバーライドします
今ClassA
でFoo()
の実際の実装はのはBar()
を言わせて、新しい機能が必要ですが、そのような要求をClassB
ありません。以下のコードサンプルを参照してください。
public abstract class BaseClass
{
public abstract void Foo();
}
public class ClassA : BaseClass
{
public override void Foo()
{
// some implemented code...
// and additional method required
Bar();
}
}
public class ClassB : BaseClass
{
public override void Foo()
{
// some implemented code...
}
}
はその後、私の質問があり来る - 私はIBar
インターフェースを実装するか、私は基本法としてBar()
方法を確認する必要がありClassA
せてください?
私は両方のアプローチが長所と短所を持つことがわかります。
にIBar
を実装すると、ClassB
と比較して付加的な機能があることがわかります。しかし、それはClassA
が可能であれば回避しようとする公衆にBar()
メソッドを公開することを意味します。
基本メソッドとしてBar()
を使用すると、現在は集中化されており、派生クラスでその実装をオーバーライドできるようになります。しかし、我々の場合、ClassB
はBar()
の知識も持っています。
Now:これらのアプローチの1つを好む明確な技術的な理由はありますか? 「より良い」オプションを決定することは可能ですか?
通常の方法のように、BarをクラスAに入れるだけです。 –
@ M.kazemAkhgaryコメントをいただきありがとうございます。しかし、将来、新しい派生クラス 'ClassC'が必要で、' Bar() 'の正確な関数が必要な場合はどうでしょうか? – woodykiddy
Bar()を使用する必要があるクラスはいくつですか?それらは同じ使用法の下にありますか? Bar()の使用法が同じ場合、それを汎用メソッドとしてBaseクラスに入れないのはなぜですか? – User2012384