对于传入泛型参数的每种类型,像这样在泛型类上使用静态构造函数会运行吗:
class SomeGenericClass<T>
{
static List<T> _someList;
static SomeGenericClass()
{
_someList = new List<T>();
}
}
使用这种方法是否有任何缺点?
class Gen<T> where T: struct
{
static Gen() {
if (!typeof(T).IsEnum) {
throw new ArgumentException("T must be an enum");
}
}
}
public class Program
{
class SomeGenericClass<T>
{
static SomeGenericClass()
{
Console.WriteLine(typeof(T));
}
}
class Baz { }
static void Main(string[] args)
{
SomeGenericClass<int> foo = new SomeGenericClass<int>();
SomeGenericClass<string> bar = new SomeGenericClass<string>();
SomeGenericClass<Baz> baz = new SomeGenericClass<Baz>();
}
}
输出:
System.Int32 System.String Program+Baz
它可以工作,但每次使用时都会创建一个新的“实例”。
是的,泛型类型的静态成员和构造函数是针对泛型参数特定的,并且将为每个不同的类型运行。没有真正的缺点。只需在将非泛型类重构为泛型类时小心。
是的,它将为您提供的每种类型运行,因为对于每个不同的提供类型,您都会获得单独的类型。