c#泛型是什么


泛型的本質是類型參數化或參數化類型,在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型。

泛型是 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();
}
}

}

 

作者還在學習中,發現錯誤的請在評論區留言。  如果有客友覺得文章還行的話,請點波推薦哦👍。 謝謝你們!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM