学习笔记——泛型

1.泛型定义

泛型(Generic)是C#2.0推出的新语法,他提供了一种更准确的使用一种以上的类型代码的方式。泛型允许开发人员声明类型参数化的代码,开发人员可以用不同的类型进行实例化。通俗的讲,就是一个方法可以传入不同类型的参数,可以执行相同的算法。

在C#1.0时,我们可以通过Object类型来实现同样的功能,但是此过程存在的装箱、拆箱会损耗程序的性能。

2.泛型作用

为了满足不同类型,相同代码的重用

3.泛型参数

泛型方法声明的时候,没有指定类型,而是在调用的时候指定。

泛型是延迟声明的:即定义的时候没有指定具体的参数类型,把参数类型的声明推迟到了调用的时候才指定参数类型。 延迟思想在程序架构设计的时候很受欢迎。例如:分布式缓存队列、EF的延迟加载等等。

编译器编译泛型时会做相应的处理(生成占位符),调用的时候,会把占位符替换成具体的数据类型。

3.泛型实现形式

3.1.泛型类

    /// <summary>

     /// 泛型类

     /// </summary>

     /// <typeparam name="T"></typeparam>

     public class GenericClass<T>

     {

         public T _T;

     }

 

 // T是int类型
 GenericClass<int> genericInt = new GenericClass<int>();
 genericInt._T = 123;

 

3.2.泛型接口

     /// <summary>
     /// 泛型接口
     /// </summary>
     public interface IGenericInterface<T>
     {
         //泛型类型的返回值
         T GetT(T t);
     }

 

 

3.3.泛型委托

public delegate void SayHi<T>(T t);//泛型委托
 

4.调用

4.1.调用要指明类型

     /// <summary>
     /// 使用泛型的时候必须指定具体类型,
     /// 这里的具体类型是int
     /// </summary>
     public class CommonClass :GenericClass<int>
     {
     }

 

4.2.如果继承的子类也是泛型,可以不指明具体类型

     /// <summary>
     /// 子类也是泛型的,继承的时候可以不指定具体类型
     /// </summary>
     /// <typeparam name="T"></typeparam>
     public class CommonClassChild<T>:GenericClass<T>
     { 
     }

 

4.3.泛型接口实现

     /// <summary>
     /// 必须指定具体类型
     /// </summary>
     public class Common : IGenericInterface<string>
     {
         public string GetT(string t)
         {
             throw new NotImplementedException();
         }
     }
 
     /// <summary>
     /// 可以不知道具体类型,但是子类也必须是泛型的
     /// </summary>
     /// <typeparam name="T"></typeparam>
     public class CommonChild<T> : IGenericInterface<T>
     {
         public T GetT(T t)
         {
             throw new NotImplementedException();
         }
     }

5.泛型约束

泛型约束,实际上就是约束的类型T。使T必须遵循一定的规则。

泛型约束实现:只需要where关键字,加上约束的条件。

 

6.泛型的协变、逆变

协变和逆变是在.NET 4.0的时候出现的,只能放在接口或者委托的泛型参数前面,out 协变covariant,用来修饰返回值;in:逆变contravariant,用来修饰传入参数。

参考资料:https://www.cnblogs.com/dotnet261010/p/9034594.html

转载于:https://www.cnblogs.com/lyyd/p/10076335.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值