难得有一片天

success.aspx?para1="要有决心"+para2="要努力"+para3="要有机会"
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

【跟我一起学Visual Studio 2005(1):C#语法篇(上)】笔记

Posted on 2007-08-23 15:45  seyon  阅读(338)  评论(1编辑  收藏  举报
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.范型支持多个占位符,以支持多种类型参数