【发布时间】:2012-07-03 11:41:41
【问题描述】:
解决这个问题的最佳方法是什么?
静态成员是所有子类的成员,我希望子类使用不同的静态成员,但名称相同,这样我就可以使用 vehicle.canDo;这应该给我不同的数组,具体取决于车辆实例的真正类别。
我可以从 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)
}
}
【问题讨论】:
-
突然想到,从 canDo 中删除 'static' 限定符应该可以解决这个问题
-
Mustafa,我认为在保持属性静态的同时实现这一目标是不可能的。事实上,当在任何item(方法、属性、类)中使用static时,这个item将只有一个instance(实际上是一种) 用于整个应用程序(这很重要,它们将具有相同的生命周期)。
标签: c# inheritance static