我有一個帶有靜態變量的基類。我想創建派生子類,它將自動擁有自己的未共享靜態變量。理想情況下,應該是這樣的:自動爲每個派生類創建一個靜態變量的副本
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'關鍵字,並找到一種不同的方式來做到這一點。 –