惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
Jina AI
Jina AI
雷峰网
雷峰网
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
美团技术团队
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
博客园 - Franky
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Apple Machine Learning Research
Apple Machine Learning Research
量子位
IT之家
IT之家
人人都是产品经理
人人都是产品经理
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - seyon

监控 SQL Server 的运行状况 [MSDN]Static,迭代器 [转]不用合并模块部署水晶报表 从vs2005升级到vs2008的理由 [水晶报表]打开报表失败 水晶报表检索COM类工厂中CLSID为{11BD5260-15B6-412D-80DB-12BB60B8FE50}的组件时失败解决办法 DB2连接方法 [转]WEB Service 下实现大数据量的传输 RegisterStartupScript和RegisterClientScriptBlock输出位置的区别 - seyon - 博客园 【转】SOA技术综览 【SQL2005 ReportingService特性与应用】笔记 自定义控件学习笔记(5):事件委托列表的使用 【.NET和J2EE使用Web Services的互操作性】笔记 Hashtable的遍历 有用的VS技巧 Windows service安装项目 DataView操作后的结果集 自定义水晶报表工具条 【跟我一起学Visual Studio 2005(19):Crystal Report篇之Web报表服务】笔记
【跟我一起学Visual Studio 2005(1):C#语法篇(上)】笔记
seyon · 2007-08-23 · via 博客园 - seyon

1.主要介绍了范型,首先特意用object类型和范型进行了对比
结构类:

public class Stack
{
object[] m_Items;
public void Push(object item)
{}
public object Pop()
{}
}

实例:

Stack stack = new Stack();
stack.Push(
1);
stack.Push(
2);
int number = (int)stack.Pop();

基于object解决方案存在的问题
– 性能问题:
• 值类型Push时要装箱处理,Pop时要取消装箱处理,造成更多的垃圾碎片,增加垃圾收集的负担
• 引用类型也有强制转换的开销
– 类型安全问题(更为严重)
• 编译时任务类型都可以转换成object,无法保证运行时的类型安全

范型和object类型的对比

2.范型的实现原理

左边说明范型其实只是保留了参数的占位符 <T>,右边可以看到实例化后生成了一个Stack'1<int32>类,如果实例化另外一个是其他类型的话,比如double,就会再IL生成另外一个类以供调用Stack'2<Double>类,依此类推,这样也就体现出了范型的好处:

 一次性地开发、测试和部署代码,通过任何类型(包括将来的类型)来重用它
• 编译器支持和类型安全
• 不会强行对值类型进行装箱和取消装箱,或者对引用类型进行向下强制类型转换,所以性能得到显著提高
– 值类型,性能通常会提高200%
– 引用类型,在访问该类型时,可以预期性能最多提高100%(当然,整个应用程序的性能可能会提高,也可
能不会提高)

3.范型支持多个占位符,以支持多种类型参数