泛型的主要约束和次要约束是什么?

当⼀个泛型参数没有任何约束时,它可以进⾏的操作和运算是⾮常有限的,因为不能对实参进⾏任何类型
上的保证,这时候就需要⽤到泛型约束。泛型的约束分为:主要约束和次要约束,它们都使实参必须满⾜
⼀定的规范,C#编译器在编译的过程中可以根据约束来检查所有泛型类型的实参并确保其满⾜约束条件。
(1)主要约束
16 ⼀个泛型参数⾄多拥有⼀个主要约束,主要约束可以是⼀个引⽤类型、class或者struct。如果指定⼀个引
⽤类型(class),那么实参必须是该类型或者该类型的派⽣类型。相反,struct则规定了实参必须是⼀个
值类型。下⾯的代码展示了泛型参数主要约束:
1 public class ClassT1<T> where T : Exception
2 {
3 private T myException;
4 public ClassT1(T t)
5 {
6 myException = t;
7 }
8 public override string ToString()
9 {
10 // 主要约束保证了 myException 拥有 source 成员
11 return myException.Source;
12 }
13 }
14
15 public class ClassT2<T> where T : class
16 {
17 private T myT;
18 public void Clear()
19 {
20 // T 是引⽤类型,可以置 null
21 myT = null;
22 }
23 }
24
25 public class ClassT3<T> where T : struct
26 {
27 private T myT;
28 public override string ToString()
29 {
30 // T 是值类型,不会发⽣ NullReferenceException 异常
31 return myT.ToString();
32 }
17 (2)次要约束
次要约束主要是指实参实现的接⼝的限定。对于⼀个泛型,可以有0到⽆限的次要约束,次要约束规定了实
参必须实现所有的次要约束中规定的接⼝。次要约束与主要约束的语法基本⼀致,区别仅在于提供的不是
⼀个引⽤类型⽽是⼀个或多个接⼝。例如我们为上⾯代码中的ClassT3增加⼀个次要约束:
1 public class ClassT3<T> where T : struct, IComparable
2 {
3 ......
4 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值