泛型:一共7个知识点

1.引入泛型,延迟声明

2.如何声明和使用泛型

3.泛型的好处和原理

4.泛型类,泛型方法,泛型接口,泛型委托

5.泛型约束

6.协变,逆变

7.泛型缓存

一.为啥会出现泛型,有啥用,啥时候用?

为什么有泛型?泛型有啥用???

问:为啥会有泛型?

答:回到根本上,简单讲就是在.net1.0的时候,不同的参数要做同一件事,要写很多方法。所以微软在2.0的时候就推出了新的语法,泛型。

有啥用?

答:出现泛型根本要解决的问题就是,不同的参数,做同一件事的问题

问:啥时候用?

答:

1.当你写了好几个方法,除了参数不同,都是干同一件事的,这时就可以用泛型方法。

2.当你写了好几个类,除了参数不同,类都是干同一个事的,此时就要用泛型类。

3.当你写了好几个接口,除了参数不同,类都是干同一个事的,此时就要用泛型接口。

4.当你写了好几个委托除了参数不同,类都是干同一个事的,此时就要用泛型委托。

二.泛型种类

.net Framwork2.0第一次推出的一个语法泛型

泛型只有4类:泛型方法,泛型类,泛型接口,泛型委托 

泛型的特点,没有写死参数类型,调用的时候才指定类型,就叫【延迟声明】:把参数类型的声明推迟到调用

泛型发方法解决的问题,用一个方法,满足不同的参数类型;做相同的事

三.
-泛型约束
泛型约束--基类约束(不能是sealed):
1)可以调用基类的一切属性方法---权利
2)可以强制保证T基类或者基类的子类--义务

四.
1>.Net4.0出现的,本质上就是解决list<父类>=list<子类>之间相互转换的问题,因为之前只是理论上说的通,编译器会报错的,协变和逆变的出现就是为了解决它。
2>协变和逆变只能放在接口或者委托的泛型参数前面
3>out 协变修饰返回值 , in 逆变 修饰传入参数
4>协变描述:list<父类>=list<子类>
5>逆变描述:list<子类>=list<父类>

五.
-泛型缓存
1>简单的描述就是,每个泛型类,都会生成一个副本(就算里面有静态字段,静态方法,这些静态也会生成一个新的副本)
2>泛型缓存是不会释放的
3>泛型缓存效率高,比字典高多了

插入语法知识:

装箱和拆箱

每一个线程都有运行【栈】,栈里面的东西等线程运行结束的时候,需要释放的,栈里面存放值类型,【堆】里面存放引用类型是对象共享的。

C#基础语法之-泛型的更多相关文章

  1. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  2. Swift2.1 语法指南——泛型

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  3. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  4. App架构师实践指南一之App基础语法

    第二章:App基础语法1.编程范式编程范型或编程范式(programming paradigm),是指从事软件工程的一类典型的编程风格.常见的编程范式有过程化(命令行)编程.事件驱动编程.面向对象编程 ...

  5. Java基础教程:泛型基础

    Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...

  6. C#基础语法,快速上収C#

    C#代码基础语法 对新手的帮助很大,可以尝试多看看然后在敲敲 // 单行注释以 // 开始 /* 多行注释是这样的 */ /// <summary> /// XML文档注释 /// < ...

  7. 带你了解Typescript的14个基础语法

    摘要:Typescript可以说是JavaScript的超集,在JS的基础上新增了许多语法特性,使得类型不再可以随意转换,能大大减少开发阶段的错误. 本文分享自华为云社区<Typescript基 ...

  8. Golang 基础之基础语法梳理 (三)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...

  9. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

随机推荐

  1. AspNetCore7.0源码解读之UseMiddleware

    Use​Middleware​Extensions 前言 本文编写时源码参考github仓库主分支. aspnetcore提供了Use方法供开发者自定义中间件,该方法接收一个委托对象,该委托接收一个R ...

  2. linux下虚拟环境venv的创建与使用以及virtualenvwrapper

    1.linux安装学习python虚拟环境 linux提供的虚拟环境工具 有virtualenv pipenv 2.我们需求是在linux上可以运行 一个django2 运行一个django1 3.安 ...

  3. sqlserver limit

    select Loaction.Lat,Loaction.Long from Company order by CompanyId OFFSET 4 ROWS FETCH NEXT 2 ROWS ON ...

  4. 2022年5月11日,NBMiner发布了41.3版本,在内核中加入了100%LHR解锁器,从此NVIDIA的显卡再无锁卡一说

           2022年5月11日,NBMiner发布NBMiner_41.3版本,主要提升了稳定性.         2022年5月8日,NBMiner发布NBMiner_41.0版本,在最新的内核 ...

  5. install dns server on ubuntu

    参考 CSDN/Ubuntu环境下安装和配置DNS服务器 在 Ubuntu 上安裝 DNS server Install BIND 9 on Ubuntu and Configure It for U ...

  6. 从0到1使用kubebuiler开发operator

    介绍 假设一个Nginx的QPS(服务器一秒内处理的请求数)上限为500,如果外部访问的QPS达到了600,为了保证服务质量,必须扩容一个Nginx来分摊请求. 在Kubernetes环境中,如果外部 ...

  7. 虚拟机:KVM

    1. KVM 介绍 1.0 虚拟化简史 其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux ...

  8. 运维:ITIL V3

    TIL 简史 在20 世纪80 年代末期,英国商务部(OGC,Office Government Commerce)发布了ITIL .OGC 最初的目标是通过应用IT 来提升政府业务的效率:目标是能够 ...

  9. CSS基础学习(二)

    11.CSS背景 ①设置背景颜色(颜色值通常可以用十六进制(如#000000)或者颜色名称(如red)来表示) 属性:background-color 例: body { background-col ...

  10. django框架3

    内容概要 注册登录功能编写 django请求生命周期流程图 路由层相关知识 1.路由匹配 2.无名有名分组 3.反向解析 4.名称空间 5.路由分发 内容详情 注册登录功能编写 1.使用自带的sqli ...