Являются ли статические члены общих классов общими для типов - PullRequest
22 голосов
/ 09 августа 2010

Я пытаюсь создать универсальный класс, который будет иметь некоторые статические функции, основанные на типе.Есть ли статические члены для каждого типа?Или только там, где используется дженерик?Причина, по которой я спрашиваю, состоит в том, что мне нужен объект блокировки для каждого типа, а не один для них.

Так что, если бы у меня было

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

, я понимаю, что ObjList определенно создал бы другой объектдля каждого используемого универсального типа, но будет ли LockObj разным для каждого универсального экземпляра (MyClass<RefTypeA> и MyClass<RefTypeB>) или одинаковым?

Ответы [ 3 ]

17 голосов
/ 09 августа 2010

Просто проверьте сами!

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
7 голосов
/ 09 августа 2010

Это будет отличаться для каждого T. В основном, для всех разных T у вас будет разный тип, и члены не будут разделены между разными типами.

4 голосов
/ 10 августа 2010

Реализованные универсальные типы в C # на самом деле являются разными типами во время выполнения, поэтому статические члены не будут общими.

...