Я пытаюсь создать универсальный класс, который будет иметь некоторые статические функции, основанные на типе. Есть ли статические члены для каждого типа? Или только там, где используется дженерик? Причина, по которой я спрашиваю, заключается в том, что мне нужен объект блокировки для каждого типа, а не один для них.
Так что, если бы у меня было
class MyClass<T> where T:class
{
static object LockObj = new object();
static List<T> ObjList = new List<T>();
}
, я понимаю, что ObjList определенно будет иметь разные объекты, созданные для каждого используемого универсального типа, но будет ли LockObj разным для каждого универсального экземпляра ( MyClass
и MyClass
) или то же самое?
Убедитесь сами!
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
Созданные экземпляры универсальных типов в C # на самом деле являются разными типами во время выполнения, поэтому статические члены не будут совместно использоваться.
Он будет разным для каждого T. По сути, для всех разных T у вас будет разный тип, и члены не являются общими для разных типов.