泛型类:
依据前面所学学问我们定义一个类:
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---泛型类、泛型要领、泛型托付的内容,更多相关内容请关注ki4网(www.ki4.cn)!