一个静态泛型类可以有不止一个实例吗?
标准的静态类只能有一个实例,对吗?就像这样:
public static class MyClass
{
public static string MyString { get; set; }
}
public void ExampleMethod(int id)
{
if (id > 0)
MyClass.MyString = id.ToString();
}
在我的程序中,
MyClass
代表一个单例实例,即应用程序范围内。但如果
MyClass
是通用的呢?public static class MyClass<T>
{
public static string MyString { get; set; }
public static T MyT { get; set; }
}
意思是对于每个指定的类型参数,我的应用程序范围将创建一个新的实例?还是它会为每个可能的类型参数创建一个单独的实例?(我真的希望不会这样)
对于逻辑来说,它仍然不能是单个实例,因为我可以执行以下操作:
public void ExampleMethod(int id)
{
MyClass<int>.MyT = id;
MyClass<DateTime>.MyT = DateTime.Now;
MyClass<string>.MyT = "Hello, World";
MyClass<DayOfWeek>.MyT = DayOfWeek.Monday;
}
感谢您提前回复。
更新 - 微软 .Net 团队已经在使用
偶然间,我发现了一个在 mscorlib
DLL 中内置的静态泛型类的使用示例:
// Decompiled with JetBrains decompiler
// Type: EmptyArray`1
// Assembly: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// MVID: 7D59CE68-D0F6-428F-B71C-C8D703E59C19
// Assembly location: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
internal static class EmptyArray<T>
{
public static readonly T[] Value = new T[0];
}
这个类的存在意味着应用程序范围将为给定类型创建一个空数组(也许数组是内存捕手对象),如果尚未创建。
MyClass<int>
和MyClass<string>
是不同的类型。这里没有实例。 - Dennis_E