這裏
https://en.wikipedia.org/wiki/Generic_programming
文檔公共描述先回答你的兩個問題:
- 在.NET中所有類型,泛型類型和其他人
Object
派生。
- 泛型類型可能與任何其他類型一樣是抽象的,但它不需要。如果你創建一個抽象泛型類型,你需要從它派生一個非抽象類型,以便能夠從中實例化一個對象。
要確定類型是否是泛型,只需查看類定義即可。 Queue
不是通用類型,而Queue<T>
是通用類型,因爲通過用其他類型替換通用類型參數T
可以獲得不同的類型。例如Queue<int>
,Queue<string>
,Queue<Object>
等全部使用與Queue<T>
類中定義的代碼相同的代碼。注意它們本身也是泛型類型。嵌套在泛型中的嵌套類型也被認爲是泛型類型。 「基本類型」Queue<T>
被稱爲泛型類型定義。
public abstract class MyListBase { }
public abstract class MyListBase<T> : MyListBase { }
public class MyList<T> : MyListBase<T>
{
public class Nested { }
}
public class MyStringList : MyList<string> { }
...
var isGenericType0 = typeof(MyListBase).IsGenericType; //False
var isGenericType1 = typeof(MyListBase<>).IsGenericType; //True
var isGenericType2 = typeof(MyListBase<>)
.MakeGenericType(typeof(char)).IsGenericType; //True
var myIntegerList = new MyList<int>();
var isGenericType3 = myIntegerList.GetType().IsGenericType; //True
var myNested1 = new MyList<int>.Nested();
var isGenericType4 = myNested1.GetType().IsGenericType; //True
var myStringList = new MyStringList();
var isGenericType5 = myStringList.GetType().IsGenericType; //False
希望你可以用你的頭周圍泛型類型現在。
我建議你從https://msdn.microsoft.com/en-us/library/512aeb7t.aspx開始 –
從Object派生的所有.net類型。作爲其他參考類型的泛型類型可以是或不可以根據程序員決定抽象 – Ivan
感謝Jon Skeet,我正在研究它。謝謝伊凡 - 在這方面抽象是無關緊要的? –