정적 변수는 주어진 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는 인스턴스 측면 속성 일뿐입니다. 그것은 클래스 측면 ("일명 kindof 정적") 수 없습니다 – mathk
@ mathk 이제는 내가 원하는 것 이해할 수도 일종의,이 대안에 대한 내 대답을 수정했습니다. –