一個靜態泛型類可以有多個單個實例嗎?通用靜態類有多個實例?
標準靜態類只有一個實例,對嗎?就像這樣:
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'是與「MyClass 」不同的類型。沒有實例。 –