是否在类型之间共享泛型类的静态成员

时间:2010-08-09 07:19:43

标签: c# generics compiler-construction static

我正在尝试创建一个泛型类,它将根据类型具有一些静态函数。每种类型都有静态成员吗​​?或者只有在使用通用的地方?我问的原因是我想要每种类型的锁对象,而不是它们之间共享的对象。

所以,如果我有

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

每个T都会有所不同。基本上,对于所有不同的T,您将拥有不同的类型,并且不会在不同类型之间共享成员。

答案 2 :(得分:4)

C#中的实例化泛型类型在运行时实际上是不同的类型,因此不会共享静态成员。