泛型的本質是型別引數化或引數化型別,在不創建新的型別的情況下,通過泛型指定的不同型別來控制形參具體限制的型別,
泛型是 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();
}
}
}
作者還在學習中,發現錯誤的請在評論區留言, 如果有客友覺得文章還行的話,請點波推薦哦??, 謝謝你們!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/17057.html
標籤:C#
上一篇:全網最完整的Redis入門指導
