靜態變量適用於給定的AppDomain
中定義的類型。它們也跨線程共享,除非您使用ThreadStaticAttribute
,此時它們變爲每線程。
類成員明顯限定爲該類的實例,但不是派生類的「全局」類。根據訪問修飾符,成員對派生實例也可以是可見的。
類與一般的參數有每個封閉泛型類型的靜態變量:
class MyClass<T>
{
public static string Name;
}
所以MyClass<int>
將擁有自己的Name
和MyClass<string>
副本都有一個不同的副本。
看看你選擇的答案,好像你想爲每個派生類的靜態變量?
你可以欺騙和使用上面的泛型規則:
class Program
{
static void Main(string[] args)
{
Derived1.WhatClassAmI = "Derived1";
Derived2.WhatClassAmI = "Derived2";
Console.WriteLine(Derived1.WhatClassAmI); // "Derived1"
Console.WriteLine(Derived2.WhatClassAmI); // "Derived2"
Console.WriteLine(BaseClass<Derived1>.WhatClassAmI); // "Derived1"
Console.WriteLine(BaseClass<Derived2>.WhatClassAmI); // "Derived2"
Console.Read();
}
class BaseClass<T> where T : BaseClass<T>
{
public static string WhatClassAmI = "BaseClass";
}
class Derived1 : BaseClass<Derived1>
{
}
class Derived2 : BaseClass<Derived2>
{
}
}
他們用「同一」一成不變的,而是各有因型封閉自己的價值觀。
感謝您的建議。還有一個缺點,就是ClassInstVar只能是一個實例屬性。它不能是類方(「aka kindof static」) – mathk
@mathk現在我可能會理解你想要什麼,我已經用另一種方式修改了我的答案。 –