私はこの質問のために、私は車のCARクラスになる永続的なオブジェクトを持っています。継承とOOPについての質問C#
public class Car
{
public string model {get;set}
public int year {get;set}
}
明らかに非常に単純化されています。
コードが開発されたので、私は当然パラメータとしてCARを受け入れる関数を作成しました。たとえば、次のように
public void PaintCar (Car theCar)
{
//Does some work
}
これまでのところは良いが、その後、私は、私は車に非常に類似していた別のクラスを、必要なシナリオを持っていたが、車はいくつかのフィールドがありませんでした。私は救助にOOPと思っ問題ありませんが、私はちょうどで終わるために、車から継承していないだろう:私は、私は車を投入するために使用していた非常に便利なユーティリティ関数に出くわしたまで
public class SuperCar : Car
{
public string newProp {get;set}
// and some more properties
}
をもう一度すべてが、桃に見えました元の特性。
Public void SetCarProperties(Car theCar)
{
//sets the properties for car here
}
私はmmmと思っていました。同じ関数を使って、上書きを必要とせずにsuperCarクラスのプロパティを設定したいと思います。スーパーカークラスのすべてのプロパティを含むように基本カー定義を変更したくない場合もあります。
この時点で私はジレンマを打ちました。オーバーライドは機能しますが、余分な作業です。より洗練されたソリューションがありますか?基本的には、スーパークラスをベースクラスを待っている関数に渡したいと思います。これはC#で可能ですか?よりエレガントな解決策がCar
のプロパティといくつかを埋めるためにbase
を使用するCar
クラス上の機能SetCarProperties
を入れて、SuperCar
でそれをオーバーライドすることである
Car myCar = new Car();
SetCarProperties(myCar); // ALL GOOD
SuperCar mySuperCar = new SuperCar();
SetCarProperties(mySuperCar); // at the moment this function is expecting type Car...
この 'SetCarProperties'メソッドを' Car'クラスに持たせ、それを子クラス 'SuperCar'でオーバーライドする方が適切だと思います。 – NullUserException
そうでなければ、オーバーライドは最もクリーンな解決策になると思います。 – NullUserException