static
필드가있는 경우 abstract
기본 클래스에서 어떤 일이 발생합니까?기본 클래스 및 파생 클래스의 정적 필드
범위가이 기본 클래스에서 상속하는 클래스 또는 상속되는 형식 (각 하위 클래스에는 abstract
기본 클래스의 static
필드의 자체 복사본이 있습니다)입니까?
static
필드가있는 경우 abstract
기본 클래스에서 어떤 일이 발생합니까?기본 클래스 및 파생 클래스의 정적 필드
범위가이 기본 클래스에서 상속하는 클래스 또는 상속되는 형식 (각 하위 클래스에는 abstract
기본 클래스의 static
필드의 자체 복사본이 있습니다)입니까?
static
회원 클래스를 선언 전적으로 특정; 서브 클래스는 별도의 사본을 갖지 않습니다. 유일한 예외는 generics입니다. 열려있는 제네릭 유형이 정적 필드를 선언하면 해당 필드는 닫힌 제네릭 유형을 구성하는 인수 유형이 조합과 일치합니다. 즉 Foo<int>
은 Foo<T>
에 필드가 정의되어 있다고 가정 할 때 Foo<string>
으로 별도의 정적 필드를 갖습니다.
다른 답변에서 지적한 것처럼 기본 클래스 정적 필드는 모든 하위 클래스에서 공유됩니다. 각 최종 서브 클래스에 대한 별도의 사본이 필요하면 키로 서브 클래스 이름으로 정적 사전을 사용할 수 있습니다 : 기본 클래스 abstract` 붉은 청어입니다 '라고
class Base
{
private static Dictionary<string, int> myStaticFieldDict = new Dictionary<string, int>();
public int MyStaticField
{
get
{
return myStaticFieldDict.ContainsKey(this.GetType().Name)
? myStaticFieldDict[this.GetType().Name]
: default(int);
}
set
{
myStaticFieldDict[this.GetType().Name] = value;
}
}
void MyMethod()
{
MyStaticField = 42;
}
}
BTW, 사실; 기본 클래스가'abstract'인지 아닌지는 중요하지 않습니다. @Marc Gravell이 지적한 행동은 같습니다. – casperOne
@casperOne : 우리가'TypeLocal'과 같은 것을 찾고 있는데,'ThreadLocal '입니다. 그래서 그 유형의 객체는 해당'subclass'에'static'이 될 것입니다. –
Xaqron