これを解決するための最良の方法は何ですか?
静的メンバーはすべてのサブクラスに対応するものであり、サブクラスに別の静的メンバーが必要ですが、名前は同じなので、vehicle.canDoを使用できます。これにより、vechicleインスタンスが実際にどのクラスであるかに応じて異なる配列が得られるはずです。
canDo配列から静的なものを削除することもできますが、同じサブクラスのすべてのインスタンスは常にcanDo配列で同じ値を持つ必要があるため、すべてのインスタンスにcanDo配列を含める必要はありません。これは、メモリの大きな浪費になります。このクラスのインスタンスが多すぎます。
class Vehicle {
public static List<string> canDo;
static Vehicle() {
canDo = new List<string>();
canDo.Add("go");
}
}
class Plane : Vehicle {
static Plane() {
canDo.Add("fly");
}
}
class Ship : Vehicle {
static Ship() {
canDo.Add("sail");
}
}
class Main {
static void Main(string[] args) {
Vehicle plane = new Plane();
Vehicle ship = new Ship();
plane.canDo; // Contains (go, fly and sail) i want only (go and fly)
ship.canDo; // Contains (go, fly and sail) i want only (go and sail)
}
}