私はそれがすべて可能であることを確認し、まだ、以下を達成することはないしようとしている: (シーンの後ろに私が実行しようとしましたCarFactoryある - ファクトリデザインパターンを実装する)抽象拡張メソッドの継承
私はすべての車で共有されているソリッドなプロパティを持つ抽象クラス "車"を持っていますし、 "ラジオディスク"、 "FuelInjection"のような機能を持っています。
"RadioDisc"または "FuelInjection"にはいくつかの種類があります。
これらの機能のそれぞれは、特定のパターンに従い、プロパティを共有していますが、車のインストールプロセスは異なります。
私はいくつかのことができる方法に基づいて車に変更を加えたいと思います。
拡張子は次のようになります。
Car myCar = new Car(); //Car is a class which has solid props & List of Feature class
FuelInjection V1 = new FuelInjection();
myCar.Install<FuelInjection>(V1) ;
理想的には、次のように行う必要がありますが、私は
拡張メソッドは、非ジェネリック静的クラスで定義しなければなりませんエラー - コンパイラを持っています
もちろん、私は一般的な静的メソッドを望んでいませんが、私は同じシグネチャを持つが、フィーチャを継承する各クラスに車を乗せている。
フィーチャの例は、車にコストを追加するFuelInjectionで、車のFuelConsumptionプロパティを改善するとします。
抽象特集クラス:
public abstract class Feature
{
internal float _cost;
public float Cost
{
get
{
return _cost;
}
}
public abstract void Install<T>(this Car car) where T : Feature;
}
具体的な機能は:
public class FuelInjection : Feature
{
public new void Install<T>(this Car car) where T : Feature
{
//In iDo some stuff to Car:
car.price += this._cost; //this suppose to be the Feature instance.
//I want to add the cost to property "Price" in Car.
}
}
は、C#であっても可能ですか? 多分行く別の方向はありますか?
'MyCar'は何ですか? 'V1'とは何ですか?疑似コードから実際に何を達成しようとしているのかは分かりにくいですが、あなたが本当に拡張メソッドを理解していないという疑いがあります。実際に何をしようとしているのかを説明しようとすると、助けが簡単になります。 –
私はそれが拡張メソッドであるとは思わない。それを通常の抽象メソッドにして、それをあなたの子クラスに実装してください。私はまたあなたがそれがジェネリックであることを必要とするのか疑問に思う。 – juharr
あなたが何を求めているかははっきりしていません。 'Install()'メソッドをインタフェース宣言に入れるだけでは不十分である理由を説明してください。 –