素手烹茶|C#笔记~泛型
一、引入泛型
在实际开发中 , 常常会出现重复代码的问题 , 例如 。
运行结果
这里的三个方法 , 使用不同的类型干了同样的事情 。 作为一个有追求的程序员 , 是绝不允许这样的事情发生的 。 我们观察发现 , 这三个方法除了方法名称和参数类型不同 , 方法体一模一样 。 我们知道object类型是一切类型的基类 , 根据里氏替换原则 , 子类对象可以赋值给父类 , 也即是说 , 可以使用object类型替换具体的类型 。 于是有基类版本的通用方法 , 且看下图 。
运行结果
代码重复的问题就这么轻松搞定 , 但是其中存在的问题却不容忽视 。
1.对于值类型(这里的int) , 发生了装箱、拆箱问题 , 从栈Copy到堆 , 从堆写到栈 , 都是多余的操作 , 产生性能损耗
2.object类型是一切类型的基类 , 那么这个方法对所有类型都适用 , 这样容易引发类型安全问题 。
那么 , 有没有一种方式 , 既可以解决代码重复问题 , 又可以避免出现上诉问题呢?
答案是:泛型 。
二、什么是泛型
泛型让我们可以编写一个可以与任何数据类型一起工作的类或方法 。 可以简单地理解为:泛型是类型的模板 。
泛型不是一种语法糖 , 而是.NetFramework 2.0推出的新语法 , 是框架升级支持的新功能 。
三、声明和使用泛型
泛型方法
运行结果
【素手烹茶|C#笔记~泛型】泛型使用尖括号和泛型名称构成: , 使用时尖括号内的T需替换为实际类型 , 也可以不带尖括号而由类型推断判断实参的类型 。
四、泛型原理
在声明泛型时 , 类型是未确定的 , 在调用泛型时 , 必须指定实际类型 。 这种在定义时未确定类型而使用时确定类型的方式 , 可以称为延迟声明 。 延迟声明体现了推迟一切可以推迟的设计思想 。
五、性能比较
循环1亿次
运行结果
多次运行后发现 , 普通方法和泛型方法的耗时相差不大 , 而object方法因为装箱耗时是其他两种方法的倍数 。
六、泛型类、泛型接口、泛型委托
前面我们讲解的都是泛型方法 , 其实除了泛型方法 , 还有泛型类、泛型接口、泛型委托 。
推荐阅读
- 润杨的红楼笔记|贾母为什么不给林黛玉另择佳婿,而是坚持宝黛联姻?,元春赐礼后
- 润杨的红楼笔记|薛宝钗安排湘云住稻香村,她安了什么心?,抄检大观园后
- 董洁■董洁比李小璐更令人唏嘘
- 无话不谈|三款笔记本两款平板,联想又来抢钱了
- 素手烹茶|Redis 事务也叫事务吗?,不支持原子性的
- 素手烹茶|中芯或被“拉黑”要求退出群聊,这是机遇还是无奈?
- 太平洋电脑网|质高价低笔记本电脑可以购买么,真的存在物美价廉?
- 运营商世界网|华为刚发布MateBookX联想就预告将重新定义笔记本,PC电脑老大急了
- 波妞时尚笔记|早秋想要穿得有气质,不如试试衬衫+半裙这一组CP,简直不要太美
- 素手烹茶|尘封23年的运钞车劫案告破:嫌犯在部队服役时作案,转业后两获三等功成法官