Reputation: 29332
I'm trying to create a generic class which will have some static functions based on the type. Are there static members for each type? Or only where there is a generic used? The reason I ask is I want a lock object for each type, not one shared between them.
So if I had
class MyClass<T> where T:class
{
static object LockObj = new object();
static List<T> ObjList = new List<T>();
}
I understand that ObjList would definitely have a different object created for each generic type used, but would the LockObj be different between each generic instantiation (MyClass<RefTypeA>
and MyClass<RefTypeB>
) or the same?
Upvotes: 21
Views: 2269
Reputation: 47790
Just check for yourself!
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
Upvotes: 17
Reputation: 76510
Instantiated generic types in C# are actually different types at runtime, hence the static members will not be shared.
Upvotes: 3
Reputation: 30883
It will be different for each T. Basically, for all different T you will have different type and members are not shared between different types.
Upvotes: 6