泛型学习总结
泛型和类
在C#中,可以将类作为一个泛型。这样做的好处在于代码的复用性大大提高,我的理解是类似于弱化版的继承。格式如下:
public class MyGenericArray<T> where T: struct //限制T的类型
{
private T[] array;
public MyGenericArray(int size)
{
array=new T[size+1];
}
public T GetItem(int index)
{
return array[index];
}
public void SetItem(int index,T value)
{
array[index]=value;
}
public void GenericMethod<X>(X x)//这个方法是为了证明在有泛型的类中,方法里面也可以使用一个完全不同泛型
{
Console.WriteLine(x.ToString());
}
}
泛型类的对象实例创建格式如下:
MyGenericArray<int> intArray=new MyGenericArray<int>(5);
for(int c=0;c<5;c++)
{
intArray.SetItem(c,c*5);
}
for(int c=0;c<5;c++)
{
Console.Write(intArray.GetItem(c)+" ");
}
intArray.GenericMethod<string>("hello Generic");
除此之外,泛型还可以使用两个参数即:
public class MyGenericArray<T,K> where T: struct
泛型与方法
泛型还可以使用方法中,代码如下:
//一个简单的互换算法
private static void Swap<T>(ref T lhs,ref T rhs)//ref类型为引用类型,其中可以包含其他所有的类型
//具体使用在下方方法应用中体现
{
T temp;
temp=lhs;
lhs=rhs;
rhs=temp;
}
int a,b;
char c,d;
a=10;
b=20;
c='I';
d='V';
Swap<int>(ref a,ref b);//互换ab的数值
Swap<char>(ref c,ref d);//互换cd的数值
泛型与委托
泛型还可以与委托联系在一起,具体用法如下:
delegate T NumberChanger<T>(T n)
//以上委托的使用
static int num=10;
NumberChanger<int> nc1=new NumberChanger<int>(AddNum);//AddNum为一
//个加法的方法,该处省略不写
NumberChanger<int> nc2=new NumberChanger<int>(MultNum);//MultNum为一
//个1乘方的方法,该处省略不写
nc1(25);
nc2(5);
以上代码只为方便自己学习和总结,无法直接使用,但是声明和初始化是正确的。