静态变量的作用域是为给定的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>
{
}
}
它们使用“相同”的静态,但由于类型闭包,每个都有自己的值。