WEB开发网
开发学院软件开发C语言 Effective C# 原则49:为C#2.0做好准备 阅读

Effective C# 原则49:为C#2.0做好准备

 2009-02-19 08:17:15 来源:WEB开发网   
核心提示: public class List < ItemType >{private class Node < ItemType >{internal ItemType val;internal Node < ItemType > next;}private N

public class List < ItemType >
{
 private class Node < ItemType >
 {
  internal ItemType val;
  internal Node < ItemType > next;
 }
 private Node < ItemType > first;
 public void AddHead( ItemType t )
 {
  // ...
 }
 public ItemType Head( )
 {
  return first.val;
 }
}

你可以用对象来代替ItemType, 这个参数类型是用于定义类的。C#编译器在实例化列表时,用恰当的类型来替换它们。例如,看一下这样的代码:

List < int > intList = new List < int >();

MSIL可以精确的确保intList中存储的是且只是整数。比起目前你所实现的集合(译注:这里指C#1.1里的集合),创建的范型有几个好处,首先就是,如果你试图把其它任何不是整型的内容放到集合中时,C#的编译器会给出一个编译错误,而现今,你须要通过测试运行时代码来附加这些错误。

在C#1.0里,你要承担装箱和拆箱的一些损失,而不管你是从集合中移出或者是移入一个值类型数据,因为它们都是以System.Object的引用形式存在的。使用范型,JIT编译器会为集合创建特殊的实例,用于存储实际的值类型。这样,你就不用装箱或者拆箱了。还不只这些,C#的设计者还想避免代码的膨胀,这在C++模板里是相关的。为了节约空间,JIT编译器只为所有的引用类型生成一个版本。这样可以取得一个速度和空间上的平衡,对每个值类型(避免装箱)会有一个特殊的版本呢,而且引用类型共享单个运行时的版本用于存储System.Object (避免代码膨胀)。在这些集合中使用了错误的引用时,编译器还是会报告错误。

上一页  1 2 3 4 5 6  下一页

Tags:Effective 原则 做好

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接