Подтвердить что ты не робот

Статические члены общих классов, разделяемые между типами

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

Итак, если у меня был

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

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

4b9b3361

Ответ 1

Просто убедитесь сами!

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

Ответ 2

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

Ответ 3

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