泛型支持的几种约束类型

泛型支持的几种约束类型

约束说明
where T:struct对于结构约束,类型T必须是值类型
where T:class类约束指定类型T必须是引用类型
where T:IFoo指定类型T必须实现接口IFoo
where T:Foo指定类型T必须派生自基类Foo
where T:new()指定类型T必须有一个默认构造函数;当使用多个约束时,这个约束必须放在最后
where T1:T2这个约束也可以指定,类型T1派生自泛型类型T2

注意:只能为默认构造函数定义构造函数约束,不能为其他构造函数定义构造函数约束。

使用泛型类型还可以合并多个约束。where T:IFoo,new()约束和MyClass<T>声明指定,类型T必须实现IFoo接口,且必须有一个默认构造函数。

注意:在C#中,where子句的一个重要限制是,不能定义必须由泛型类型实现的运算符。运算符不能再接口中定义。在where子句中,指定定义基类、接口和默认构造函数。

例如:

     public class BaseCalss { }
    public interface IStudy { }
    public class GenericCalss<T1, T2, T3,T4,T5>
        where T1 : struct     //T1必须是值类型
        where T2 : class       //T2必须是引用类型
        where T4 : BaseCalss            //T4必须继承基类型BaseCalss、
        where T5:IStudy    //T5必须是IStudy接口
        where T3 : new()  //T3这个类型中,必须有一个无参数的构造方法,这个约束必须放到最后
    {

        public T2 GetOneByIndex(T1 position)
        {
            // return this.ProductList[position];  //直接写是错误的

            //var 推断类型
            // var index = position;                       //因为我们不能特别明确的知道T1是什么类型,使用var的时候,后面的类型必须是明确的; var推断类型

            //dynamic动态类型
            dynamic index = position;                //dynamic是在运行时解析对象类型,在编译阶段是不解析的。
            return this.ProductList[index];  
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

elon8000

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

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

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

打赏作者

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

抵扣说明:

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

余额充值