C#泛型详解

什么是泛型

泛型就是将类型做参数的技术!
详细一点来说就是:
泛型就是就是使用类型参数定义的数据类型或方法。
平常使用List的时候,我们就在不知不觉中已经使用了泛型。

泛型的语法

泛型的语法有俩种.
第一种是在类名后面加上

    class My<T>
    {
        ArrayList arrList = new ArrayList();//
        public void Add(T i)
        {
            arrList.Add(i);
        }
    }```

第二种是在方法名后面加上<T>

```csharp
class Your
    {
        ArrayList arrList = new ArrayList();//
        public void Add<T>(T i)
        {
            arrList.Add(i);
        }
    }

俩种格式都可以,看个人爱好调用。

为什么要用泛型,泛型的优点是什么?

1、通用性好,讲一个算法基于类型的不同而复用,避免代码膨胀。
例如一个加法,现在有int 和float两种类型,我们用泛型只需要写一遍即可。而不用泛型则需要俩种方法,当然也可以使用object,但是这样会造成装箱拆箱,影响效率。
2、类型安全,避免强制类型转换
3、性能较好、避免装箱操作

泛型约束是什么,有什么作用

在定义泛型类时,可以对客户端代码能够在实例化类时
用于类型参数(泛型)的类型种类施加限制。
如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。
这些限制称为约束。
约束是使用 where 上下文关键字指定的。
总结:限制类型参数代表的数据类型,让它只代表某类或者某些数据类型。
此处拿基类名做例子讲解。
在这里插入图片描述
此处提示报错,类型T中没有 CompareTo方法,因为这里没有使用泛型约束,编译器不知道你这个T类型是否有相对的方法,此时我们打开泛型约束,
进入IComparable中查看,发现有这个方法。我们调用的参数分别是int类型与float类型,这两个类都继承这个接口。
在这里插入图片描述
在这里插入图片描述
在这个Max的方法中,我们调用了比较的方法,泛型约束就是防止T没有该方法,软件运行则会报错。约束,就是约束你用这个T想做什么,阿么T中必须要有对应的方法,可以是继承自父亲或者接口,也可以是自身拥有的。
PS:泛型约束可以有多个,并且是与的关系。

常用的泛型约束

T:struct 类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。 有关更多信息,请参见 使用可以为 null 的类型(C# 编程指南)。
T:class 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new() 类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时, new() 约束必须最后指定。
T:<基类名> 类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

常用的是基类名接口名称,其他的用到的时候再查即可。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值