2010-08-09 6 views
22

형식을 기반으로 일부 정적 함수를 갖게 될 제네릭 클래스를 만들려고합니다. 각 유형에 대한 정적 멤버가 있습니까? 또는 일반 사용되는 곳만 사용할 수 있습니까? 내가 물어 보는 이유는 각각의 유형에 대해 잠금 객체를 원한다는 것입니다.일반 클래스의 정적 멤버가 형식간에 공유됩니다

그래서 나는 ObjList 확실히 사용 된 각 제네릭 형식에 대해 만든 다른 개체를 것 이해하지만, LockObj 각 일반적인 인스턴스 (MyClass<RefTypeA>MyClass<RefTypeB>) 또는 같은 사이 다른 것

class MyClass<T> where T:class 
{ 
    static object LockObj = new object(); 
    static List<T> ObjList = new List<T>(); 
} 

이 있다면 ?

답변

17

직접 확인하십시오.

public class Static<T> 
{ 
    public static int Number { get; set; } 
} 

static void Main(string[] args) 
{ 
    Static<int>.Number = 1; 
    Static<double>.Number = 2; 
    Console.WriteLine(Static<int>.Number + "," + Static<double>.Number); 
} 
// Prints 1, 2 
+0

나는 코너 케이스에 대해 걱정했습니다. 아직도 당신은 tdd 남자들이 올바른 자리에 머리를 가지고있는 것 같습니다 – Spence

+0

@ tzaman이 다음 설명 할 수 있습니다 : http://stackoverflow.com/questions/35048279/protected-static-string-accessability-issue-in-c-sharp? noredirect = 1 # comment57871825_35048279 – bpeikes

7

각 T마다 다를 수 있습니다. 기본적으로 모든 다른 T에 대해 서로 다른 유형을 가지며 구성원은 다른 유형간에 공유되지 않습니다.

4

C#의 인스턴스화 된 제네릭 형식은 실제로 런타임에 다른 형식이므로 정적 멤버는 공유되지 않습니다.

+1

각 값 유형마다 다른 코드 집합이 있지만 참조 유형이 다른 "유형"제약 조건과 동일한 "일반"코드 집합을 사용했기 때문에 걱정했습니다. 그냥 코너 케이스를 확인하십시오. – Spence

관련 문제