当前位置: 首页 > article >正文

C# 泛型 学习理解记录

参考学习抖音@新猿易码 视频

场景:

ArrayList arrayListInts = [1, 2, 3, 4];

arrayListInts. Add("5");

ArrayList arrayListStrings = ["a", "b", "c", "d"];

可以存不同类型,但存同一类型时,也是转Object类型,取出时转值类型,这个过程会慢,

在framework2.0后提出使用泛型解决这个问题,指定类型然后就不用转换类型来消耗资源;

泛型约束:

1.结构约束

public class StructList<T> where T :struct  {  }

约束为值类型(float int 等),泛型指定string就报错

2. 类约束

public class StructList<T> where T :class  {  }

约束为引用类型(string等,自定义类名),泛型指定int等值类型就报错

3.构造函数约束

public class xxxList<T> where T :new()

new()  即构造函数 不带参

4.基类名约束

public class xxxList<T> where T :基类名 {  }

必须是这个基类或继承这个基类的派生类

5.接口约束

public class xxxList<T> where T :接口名 {  }

实现对应接口

6.泛型方法还有个 泛型约束泛型

public class TestList<U>

{

        //约束add增加的类型是U的类型或子类类型

        public void Add<T>(T item) where T : U

        {

                // do something

        }

}

协变和逆变

都是在接口中使用的,

协变 如上面截图,实现接口时 是返回类型,out T, 使用时父类在前,子类在后

逆变 如上面截图,实现接口时 是参数类型,   in T, 使用时子类在前,父类在后

没遇到过具体使用场景,先记录,以后理解使用,反正是为了安全,使用协变 是,返回类型得到泛型限制,输入参数得不到,逆变 反之,

所以,在实例化之后,实现接口逆变的可以得到约束返回类型无传参的方法的使用,逆变得到 无返回类型而约束参数类型的方法 的使用

协变+逆变

想使用两种方法(函数)的引用,就一起实现,但两个泛型就不能完全一样了(可以一样或不一样?)

总结,泛型的使用可以 得到效果:

1.  代码可重用。如类型泛型就不用写多个类等

2.  性能好。不用想数组那样,一种类型还 拆箱装箱

3.  类型安全。约束类对应类型,在使用这些类的 函数或属性时一般都存在,可以正常调用

 


http://www.kler.cn/a/411543.html

相关文章:

  • QT QToolButton控件 全面详解
  • 软件团队的共担责任
  • 前端适配:常用的几种方案
  • 【C++ 算法进阶】算法提升二十三
  • Pytorch微调深度学习模型
  • ES 和Kibana-v2 带用户登录验证
  • vue3+ts 我写了一个跟swagger.yml生成请求和响应实体(接口)
  • 电商平台数据获取:解锁商业洞察的多元渠道
  • #Verilog HDL# Verilog中的UDP原语
  • 2024算法基础公选课练习五(DFS2)
  • 前端---CSS(部分用法)
  • C++的中的继承
  • 计算机操作系统——进程控制(Linux)
  • 第八篇:CamX RawHdr Feature Enable
  • org.apache.log4j的日志记录级别和基础使用Demo
  • 【kafka01】消息队列与微服务之Kafka详解
  • 数据库(总结自小林coding)|索引失效的场景、慢查询、原因及如何优化?undo log、redo log、binlog 作用、MySQL和Redis的区别
  • 阿里云私服地址
  • SpringBoot(四十)SpringBoot集成RabbitMQ使用过期时间+死信队列实现延迟队列
  • 林业产品推荐系统:Spring Boot架构设计
  • K8s的水平自动扩容和缩容HPA
  • C#中面试的常见问题006
  • 使用mingw+CMake在Windows平台编译OpenCV
  • 政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例
  • element-plus动态判断表单是否是必填项。出错时显示的错误。在不是必填项时为什么还能显示
  • flink学习(8)——窗口函数