[英]Static fields of derived class not initialized before they are needed in the base class
[英]Static fields in a base class and derived classes
在abstract
基礎 class 中,如果我們有一些static
字段,那么它們會發生什么?
他們的 scope 是從這個基礎 class 繼承的類,還是只是它所繼承的類型(每個子類都有它自己的static
abstract
基類字段的副本)?
static
成員完全特定於聲明class; 子類沒有單獨的副本。 這里唯一的例外是 generics; 如果開放泛型類型聲明了 static 字段,則該字段特定於構成封閉泛型類型的 arguments 類型的確切組合; 即Foo<int>
將有單獨的 static 字段到Foo<string>
,假設這些字段是在Foo<T>
上定義的。
正如在其他答案中指出的那樣,基礎 class static 字段將在所有子類之間共享。 如果您需要每個最終子類的單獨副本,您可以使用 static 字典,其中子類名稱作為鍵:
class Base
{
private static Dictionary<string, int> myStaticFieldDict = new Dictionary<string, int>();
public int MyStaticField
{
get
{
return myStaticFieldDict.ContainsKey(this.GetType().Name)
? myStaticFieldDict[this.GetType().Name]
: default(int);
}
set
{
myStaticFieldDict[this.GetType().Name] = value;
}
}
void MyMethod()
{
MyStaticField = 42;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.