2011-08-25 10 views
1

나는 일반적인 클래스와 C#에서 문제를했습니다 :제네릭 클래스의 정적 속성을 초기화하는 방법은 무엇입니까?

class Hop<T> 
{ 
    static string x; 
} 

내가 Hop의 모든 인스턴스에 대한 x를 초기화 할 수 있습니까?

예를 들어 Hop.x = "test";과 같은 것은 작동하지 않습니다.

+0

X 비공개로 만들 공공 – mtijn

+0

I 이런 패턴에 대해 매우 추천합니다. 모든 일반적인 구현에서 데이터를 공유하는 것은 싫은 일입니다. – Tejs

답변

4

문제가있는 경우 Hop 유형이없고 Hop<T> 제네릭 유형이 있습니다. 에 대해 어떻게 :

class Hop 
{ 
    static string X; 
} 

class Hop<T> : Hop 
{ 

} 

그러나 여전히이 문제, 이것이다 :

Hop<string>.X = "hello"; 
string x = Hop<int>.X; // x == "hello". 

정적 필드는 Hop 유형이 아닌 Hop<T> 유형입니다. 당신은 초기화 시간 컴파일해야하는 경우

+0

내 요구 사항에 만족한다고 생각합니다. "x"는 모든 홉에서 동일해야합니다. . 고마워 – Orpheo

0

, 당신은 쓸 수 있습니다 : 더 복잡한 초기화를 들어

class Hop<T> 
{ 
    static string x = "Foo"; 
} 

, 당신은 클래스 이니셜 라이저를 사용할 수 있습니다

class Hop<T> 
{ 
    static string x; 

    static Hop() 
    { 
     x = "Foo"; 
    } 
} 
관련 문제