我有一个带有静态变量的基类。我想创建派生子类,它将自动拥有自己的未共享静态变量。理想情况下,应该是这样的:自动为每个派生类创建一个静态变量的副本
class Parent
{
Texture2D picture;
static Texture2D pictureOrigin;
Parent()
{
picture = pictureOrigin;
/*Loading the static origin to an instance variable
because I might want to have more pictureOrigins
and alternate them or perhaps change the picture
of the instance based on a certain event, etc.*/
}
}
class Subclass1 : Parent //Edit: forgot to write the inheritance in this example
{
Subclass1() : base()
{ }
}
class Subclass2 : Parent
{
Subclass2() : base()
{ }
}
void main()
{
Parent.pictureOrigin = Load("pictureForParent");
Subclass1.pictureOrigin = Load("pictureForSubclass1");
Subclass2.pictureOrigin = Load("pictureForSubclass2");
//Then creating instances of the classes and drawing them, etc.
}
但发生的事情是,他们都获得了最后的加载图像(pictureForSubclass2),因为静态变量pictureOrigin
在它们之间共享。
最快锁定被手动添加新的静态变量pictureOrigin
到每个子类和隐藏的基类的pictureOrigin
变量:
class Subclass1 : Parent
{
new static Texture2D pictureOrigin;
Subclass1() : base()
{
picture = pictureOrigin;
}
}
此外,在创建抽象方法或类似,以确保新的静态变量的创建在子类中。但它似乎太麻烦,不太优雅。有没有更好的方法来做到这一点?
静态看起来像一个坏主意,它为什么必须是静态的任何理由?您可以将图像资源加载到某个图像存储区,然后将所需图像提供给每个实例? –
在您的代码中,Subclass1和Subclass2不是从Parent继承的。 –
您可以使'Parent'通用,就像'父Parent其中T:Parent ',然后继承指定子类的类型:'class Subclass1:Parent '。然后你会利用这样一个事实,即每个“”类型的独特组合将获得他们自己的所有静态字段的副本。话虽如此,我会尽量摆脱'static'关键字,并找到一种不同的方式来做到这一点。 –