我正在尝试创建一个泛型类,它将根据类型具有一些静态函数。每种类型都有静态成员吗?或者只有在使用通用的地方?我问的原因是我想要每种类型的锁对象,而不是它们之间共享的对象。
所以,如果我有
class MyClass<T> where T:class
{
static object LockObj = new object();
static List<T> ObjList = new List<T>();
}
我理解ObjList肯定会为每个使用的泛型类型创建一个不同的对象,但LockObj在每个泛型实例化(MyClass<RefTypeA>
和MyClass<RefTypeB>
)之间是不同的还是相同的?
答案 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#中的实例化泛型类型在运行时实际上是不同的类型,因此不会共享静态成员。