泛型允許您延遲編寫類或方法中的編程元素的資料類型的規範,直到實際在程式中使用它的時候。換句話說,在聲明類或方法的時候由於不知道使用者要傳入什麼樣類型的參數,所以在傳入類型的地方“挖一個坑(“<T>”)",使用它的時候我們再用具體資料類型填上。
泛型類:
根據前面所學知識我們定義一個類:
class Data { public int n_data; }
此時n_data的資料類型已經確定為int類型,所以為他賦值的時候只能為int 類型,如果改寫為下面的泛型類:
class Data<T> { public T n_data; }
此時n_data的資料類型還不確定是什麼類型,所以為他賦值的時候需要指定T也就是n_data的類型,也就是填坑,
Data<int> data = new Data<int>(); //指定T為int Data<string> data = new Data<string>(); //指定T為string
當然了,上面的例子中是不能夠指定T為數組的,如果要讓n_data的類型為數組的話,下面的例子可以滿足:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class Data<T> //泛型類 { public T[] n_data; //泛型變數 public Data(int size) //構造方法,new的時候調用構造方法開闢空間 { n_data = new T[size]; } //輸入 public void setdata(int index,T value) { n_data[index] = value; } //輸出 public T getdata(int x) { return n_data[x]; } } class Program { static void Main(string[] args) { Data<int> data = new Data<int>(5); data.n_data[2] = 2; Console.WriteLine(data.n_data[2]); } } }
結果為:2
泛型方法:
這個我們以swap交換方法為例,在C++中swap函數是這麼寫的:
#include <iostream> using namespace std; template <typename T> void swap1(T &a,T &b) //也可以看作泛型 { T temp; temp = a; a = b; b = temp; } int main() { int a=0,b=1; swap1(a,b); cout<<a<<"\t"<<b<<endl; return 0; }
結果: 1 0
如果a與b是字元類型以上函數也適用。C#swap方法如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class data {//swap方法,ref是按地址傳遞 public static void swap<T>(ref T a, ref T b) { T temp; temp = a; a = b; b = temp; } static void Main(string[] args) { string a = "HC"; string b = "666"; swap(ref a,ref b); Console.WriteLine(a+"\t"+b); //結果 666 HC } } }
結果:666 HC 這與C++的倒是很相似啊
泛型委派:
委託也有泛型的,接著上面的例子:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { public delegate void MyDelegate<T>();//泛型委派 class Data<T> { private T a; private T b; public void setvalue(T x, T y) { a = x; b = y; } //swap方法,ref是按地址傳遞 public void swap() { T temp; temp = a; a = b; b = temp; } public void printvalue() { Console.WriteLine(a + "\t" + b); } } class program { static void Main(string[] args) { Data<string> data = new Data<string>(); data.setvalue("HC","666"); MyDelegate<string> my = new MyDelegate<string>(data.swap); my += data.printvalue; my(); //結果 666 HC } } }
結果:
關於泛型就介紹這麼多了,又什麼錯誤的地方歡迎指出^_^
以上就是 C#學習日記30---泛型類、泛型方法、泛型委派的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!