泛型:一共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. Glide源码解析二---into方法

    转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12543154.html Glide作为一个强大的图片加载框架,已经被android官方使用,所以,明白 ...

  2. 用简单的 Node.js 后台程序浅析 HTTP 请求与响应

    用简单的 Node.js 后台程序浅析 HTTP 请求与响应 本文写于 2020 年 1 月 18 日 我们来看两种方式发送 HTTP 请求,一种呢,是命令行的 curl 命令:一种呢是直接在浏览器的 ...

  3. leetcode 643. Maximum Average Subarray I 子数组最大平均数 I

    一.题目大意 https://leetcode.cn/problems/maximum-average-subarray-i/ 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k . 请你 ...

  4. 好客租房57-props深入(4props的默认值)

    1给props设置默认值 //导入react     import React from 'react'     import ReactDOM from 'react-dom'     import ...

  5. Spring是如何整合JUnit的?JUnit源码关联延伸阅读

    上一篇我们回答了之前在梳理流程时遇到的一些问题,并思考了为什么要这么设计. 本篇是<如何高效阅读源码>专题的第十二篇,通过项目之间的联系来进行扩展阅读,通过项目与项目之间的联系更好的理解项 ...

  6. redis的Linux系统安装与配置、redis的api使用、高级用法之慢查询、pipline事物

    今日内容概要 redis 的linux安装和配置 redis 的api使用 高级用法之慢查询 pipline事务 内容详细 1.redis 的linux安装和配置 # redis 版本选择问题 -最新 ...

  7. HTML区块

    1.HTML 可以通过 <div> 和 <span>将元素组合起来. 2.HTML <div> 元素 HTML <div> 元素是块级元素,它可用于组合 ...

  8. [2021-TKK 暑期训练第一场] 1585:下馆子-3

    题目做了超链接 参考官方题解,作部分优化 下馆子 -3 题意: 给定n组数据,由name,time构成 当只有一个最大值时,输出该同学 当不止有一个最大值时,输出最先大于等于max次的同学 题解: 考 ...

  9. Vue基础篇 之 v-model 模拟

    我们知道vue中 为简化表单输入 提供了v-model 的语法绑定 将 vue的属性和表单元素进行了双向绑定 大大简化了表单数据操作的数据绑定 那么v-model 是如何实现双向绑定的呢? 今天我们来 ...

  10. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...