C#系列之泛型约束

目录

1.什么是泛型约束?

泛型约束有6种:

2.各泛型约束讲解

值类型约束

引用类型约束

无参公共构造函数约束

类约束

接口约束

另一个泛型约束

3.约束的组合使用

通过逗号组合使用

4.多个泛型约束


1.什么是泛型约束?

让泛型的类有一定的限制。

关键字:where

泛型约束有6种:

值类型     where泛型字母:struct

引用类型    where泛型字母:class

存在无参公共构造函数    where泛型字母:new()

某个类本身或者其派生类  where泛型字母:类名

某个接口的派生类型   where泛型字母:接口名

另一个泛型类型本身或者派生类型  where泛型字母:另一个泛型字母

2.各泛型约束讲解

值类型约束
class Test1<T> where T:struct
{
  public T value;
  public void TestFun<K>(K v) where K:struct
  {
  
  }
}
t.TestFun("123");
t.TestFun<float,double>(1.4f);
Test1<int> t1=new Test<int>();
t1.TestFun<float>(1.3f);
引用类型约束
class Test2<T> where T:class
{
  public T value;
  public void TestFun<K>(K k)where K:class
  {
  }
}
Test2<Random> t2=new Test2<Random>();
t2.value=new Random();
t2.TestFun<object>(new object());
无参公共构造函数约束

①必须是无参构造函数,如果结构体中编写有参函数,无参构造函数不会被顶替。

②必须是公共的

③必须是非抽象类型,因为抽象类型不能够去new它。

类约束

必须是子类或者派生类才不会报错

class Test4<T> where T:Test1

{

 public T value;

 public void TestFun<K>(K k) where K:Test1

  {

  }

}

接口约束

class Test4:IFly

{

}

class Test5<T> where T:IFly

{

 public T value;

 public void TestFun<K>(K k)where K:IFly

{

}

}

某个接口的派生类

另一个泛型约束
class Test6<T,U>where T:U
{
 public T value;
 public void TestFun<K k> where K;V
  {
  }
}

3.约束的组合使用

通过逗号组合使用
class Test7<T> where T:class,new()
{ 

}

4.多个泛型约束

class Test8<T,K> where T:class,new() whereK:struct
{

}

注意:多个泛型约束用where连接即可。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nicole Potter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值