静态变量适用于给定的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现在我可能会理解你想要什么,我已经用另一种方式修改了我的答案。 –