泛型的本質是類型參數化或參數化類型,在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型。 泛型是 2.0 版 C# 語言和 公共語言運行庫 (CLR) 中的一個新 功能。泛型將類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方法將 ...
泛型的本質是類型參數化或參數化類型,在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型。
泛型是 2.0 版 C# 語言和 公共語言運行庫 (CLR) 中的一個新 功能。泛型將類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方法將一個或多個類型的指定推遲到客戶端代碼聲明並實例化該類或方法的時候。例如,通過使用泛型類型參數 T,您可以編寫其他客戶端代碼能夠使用的單個類,而不致引入運行時強制轉換或裝箱操作的成本或風險。
1.基礎類庫中的泛型
泛型類或介面 |
描述 |
對應的非泛型類型 |
Collection<T> ICollection<T> |
為泛型容器提供基類 |
CollectionBase ICollection |
Comparer<T> IComparer<T> IComparable<T> |
比較兩個相同泛型類型的對象是否相等、可排序。 |
Comparer IComparer IComparable |
Dictionary<K, V> IDictionary<K,V> |
表示用鍵組織的鍵/值對集合。 |
Hashtable IDictionary |
Dictionary<K, V>.KeyCollection |
表示Dictionary<K, V>中鍵的集合。 |
None. |
Dictionary<K, V>.ValueCollection |
表示Dictionary<K, V>中值的集合。 |
None. |
IEnumerable<T> IEnumerator<T> |
表示可以使用foreach 迭代的集合。 |
IEnumerable IEnumerator |
KeyedCollection<T, U> |
表示有鍵值的集合。 |
KeyedCollection |
LinkedList<T> |
表示雙向鏈表。 |
None. |
LinkedListNode<T> |
表示LinkedList<T>中的節點。 |
None. |
List<T> IList<T> |
使用大小可按需動態增加的數組實現 IList 介面 |
ArrayList IList |
Queue<T> |
表示對象的先進先出集合。 |
Queue |
ReadOnlyCollection<T> |
為泛型只讀容器提供基類。 |
ReadOnlyCollectionBase |
SortedDictionary<K, V> |
表示鍵/值對的集合,這些鍵和值按鍵排序並可按照鍵訪問,實現IComparer<T>介面。 |
SortedList |
Stack<T> |
表示對象的簡單的後進先出集合。 |
Stack |
2.示例
// Declare the generic class
public class GenericList<T>
{
void Add(T input) { }
}
class TestGenericList
{
private class ExampleClass { }
static void Main()
{
// Declare a list of type int
GenericList<int> list1 = new GenericList<int>();
// Declare a list of type string
GenericList<string> list2 = new GenericList<string>();
// Declare a list of type ExampleClass
GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
}
}
3.用途
使用泛型類型可以最大限度地重用代碼、保護類型的安全以及提高性能。
泛型最常見的用途是創建集合類。
.NET Framework 類庫在 System.Collections.Generic 命名空間中包含幾個新的泛型集合類。應儘可能地使用這些類來代替普通的類,如 System.Collections 命名空間中的 ArrayList。
您可以創建自己的泛型介面、 泛型類、泛型方法、泛型事件和泛型委托。
可以對 泛型類進行約束以訪問特定數據類型的方法。
關於泛型 數據類型中使用的類型的信息可在運行時通過反射獲取。
4.練習
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
}
//泛型類
static T GetT<T>() where T:new()
{
return new T();
}
//泛型方法
static void create<K>(K stu) where K: MiddleStu
{
stu.Say();
}
}
//泛型介面
interface Stu
{
void Say();
}
//實現介面
class MiddleStu : Stu
{
public void Say()
{
throw new NotImplementedException();
}
}
}
作者還在學習中,發現錯誤的請在評論區留言。 如果有客友覺得文章還行的話,請點波推薦哦