我目前正在使用C#,并且我有一个基类(项目符号)需要有一个变量和后续的getter(图像),因为另一个类需要这种行为(上电)以便正确显示。然后将子弹扩展为制造具有不同行为的许多不同子弹。但是,每个子弹扩展类每个类只需要一个图像(不是每个实例),因为它永远不需要在类似类的子弹之间进行更改,并且屏幕上会有数百个,因此空间是个问题。即,我需要一个基类中的对象,然后在该类的扩展中是静态的。有没有办法在C#中创建它,如果不是,出于好奇,任何其他面向对象的语言?
非常感谢
编辑: 例如:
class bullet{
public Image Level
{
get { return image; }
set { image = value; }
}
}
class spiralBullet : bullet{
static var image = "spiralbullet";
}
class largeBullet : bullet{
static var image = "largebullet";
}
除了某种方式,getter为每个类返回正确的静态图像
答案 0 :(得分:1)
在基类上定义一个抽象属性Getter。
在派生类中,有一个私有静态图像字段。
覆盖抽象属性Getter并返回静态图像字段。
public abstract class Bullet
{
public abstract Image Image { get; }
}
public class SquareBullet : Bullet
{
private static Image _image /* = Load your image */;
public override Image Image
{
get
{
return _image;
}
}
}
或者,如果Image是一个简单的硬编码值:
public abstract class Bullet
{
public abstract string Image { get; }
}
public class SquareBullet : Bullet
{
public override Image Image
{
get
{
return "Square";
}
}
}
这里的优点是,如果合适,则“Square”值存在于代码段中,而不是数据段中,并且根据定义是“静态”(或共享)。