您的位置:首页 > 编程语言 > C#

C#泛型

2015-12-22 16:46 323 查看

1.泛型简介

简要来说泛型其实就是对类的抽象,是比类型更抽象的一级。对类来说,类是具有相同属性和方法的一类对象的集合,也就是具有相同属性的对象的抽象。

而泛型是具有相同执行指令的类型的集合,泛型是这些相似类型的一个模板,是对他们的更高一级的抽象。

2.为什么使用泛型

举例来说,现在有一个类,类中有一个某个类型的数组以及一个获取数组某索引的值的一个方法。

代码如下:

static void Main(string[] args)
{

MyGeneric<int> mygen = new MyGeneric<int>();//用int类型代替占位符
mygen.SetArr(new int[] {1,2,3 });
int a=mygen.GetValue(1);

MyGeneric<string> mygen2 = new MyGeneric<string>();//用string类型代替占位符
mygen2.SetArr(new string[] {"1","2","3" });
string b = mygen2.GetValue(1);
}


View Code

4.泛型方法

泛型方法的申明比普通方法的申明多了一对尖括号和泛型参数,例如:

public void MyGenericMethod<T>(T t)


如果有多个泛型模板,中间用“,”隔开,如:

public T MyGenericMethod<T,R>(T t,R r)


泛型方法的调用:我们先申明一个没有返回值的泛型方法:MyMethod

static void MyMethod<T>(T[] arr)
{
foreach (T item in arr)
{
Console.WriteLine(item.ToString());
}

}


接着在main方法中调用:

static void Main(string[] args)
{
MyMethod<string>(new string[] {"1","2","3" });//泛型类型为string
MyMethod(new string[] { "1", "2", "3" }); //这个调用编译器自动根据参数推断类型

MyMethod<int>(new int[] { 1, 2, 3 });
MyMethod(new int[] {1,2,3});
}


5.泛型委托

泛型委托的申明方式和直接申明委托的方式就多了一对尖括号,形式是这样的:

delegate R MyDelgate<T,R>(T t)

关键字说明:

delegate:申明委托的关键字

R:申明委托的返回类型

<T,R>:泛型委托的类型参数

T t :委托的形式参数

泛型委托实例:

public delegate void MyDel<T>(T t);//没有返回类型的泛型委托
public delegate R MyDel<T,R>(T t); //有返回类型的委托


6.泛型中的协变和逆变(待续)

7.泛型接口(待续)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: