泛型中new()约束的用法

一、.NET中支持的类型参数约束有以下几种

where T : struct              T必须是一个结构类型
where T : class               T必须是一个类(class)类型,不能是结构(structure)类型
where T : new()               T必须要有一个无参构造函数
where T : NameOfBaseClass     T必须继承名为NameOfBaseClass的类
where T : NameOfInterface     T必须实现名为NameOfInterface的接口

二、泛型中new()约束基本形式

class A<T> where T : new() 

三、泛型中new()约束实例

 

public class A<T> where :class,new()
{
      public void Func()
      {
            T t=new T();
       }
}
 
 

//泛型类T的一个实现类Test
public class Test
{
        public Test(int a)
        {
        }
}

此时不能编译通过

解决方案:在Test类中加入无参构造函数即可。

四、泛型中new()约束的注意事项

1、泛型定义中有new()约束关键字时,表示必须有一个公共的无参的构造函数。简单点说就是你传递一个类代替T的时候,这个类必须有一个构造函数,且必须是公共的无参的。

2、当有多个约束时候,new()关键字必须放到坐后面。

3、在使用new()约束时,可以通过调用该无参构造函数来创建对象。 

五、多个泛型类型参数

对于多个类型参数,每个类型参数都使用一个 where 子句

 

class Dictionary<TKey, TVal>
    where TKey : IComparable, IEnumerable,new()
    where TVal : IMyInterface,new()
{
    public void Add(TKey key, TVal val)
    {
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值