C#泛型

泛型用“类型占位符”来写代码,在创建类的实例时指明真实的类型。
泛型类型不是类型,而是类型的模板。所以我们在创建类时,我们需要先从泛型类构建实际的类型,然后再创建这个实际类型的实例。
C#提供了五种泛型:类,结构,委托,接口,方法;前四个是类型,方法是成员。

声明泛型类
1.在类名之后放置一组尖括号
2.在尖括号中用“,”分隔的占位符来表示需要提供的类型,一般用T,U,W 这些叫类型参数
3.在泛型类声明的主体中使用类型参数来表示应该替代的类型

创建构造类型
用真实类型(类型实参)代替占位符,编译器获取这些真实类型并创建构造类型

创建变量和实例
SomeClass<short,int> myClass1 = new SomeClass<short,int>()
或 var myClass1 = new SomeClass<short,int>()
左边代码在栈上为myClass1分配一个引用,值时null;右边代码在堆上分配实例,并且把引用赋值给变量。

C#中所有对象都继承自object类,除了公用的一些ToString(),Equal(),GetType()成员方法外,其他的方法在编译过程中可能会报错,为了让泛型变得更有用,我们需要提供额外的信息让编译器知道参数可以接受哪些类型,这些额外的信息叫做“约束”(constrain)。
例如: class SomeClass<T1,T2,T3>
where T2:Custom
where T3:IComparable
{

}
约束规则:
(1)最多只能有一个主约束,如果有则必须放在第一位;
(2)可以有任意多个接口名约束
(3)如果存在构造函数约束,则必须放最后

泛型方法:
泛型方法可以在泛型类,非泛型类以及结构和接口中声明。
泛型方法参数:
(1)封闭在圆括号内的方法参数列表
(2)封闭在尖括号内的类型参数列表
例如: public void PrintData<S,T>(S p, T t) where S:person
{

}
调用泛型方法:
int a = 0;
string b = “asdf”;
PrintData<int,string>(a, b);
如果编译器可以从方法参数推断出类型参数,则在调用的时候可以省略类型参数和尖括号
例如: public void MyMethod(T myVar)
{

}
Int myInt = 0;
MyMethod (myInt);
可以省略写成 MyMethod(myInt);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值