静的変数は、特定のに対して定義されているタイプにスコープされ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>
{
}
}
それらは「同じ」静的を使用しますが、型クロージャのためにそれぞれが独自の値を持っています。