解释泛型的基本原理

来源:互联网 发布:永恒的记忆js下载 编辑:程序博客网 时间:2024/05/01 18:14
 解释泛型的基本原理
本文节选自《.NET程序员面试指南》一书

    泛型可说是自.NET 2.0中推出的众多特性中相当重要的一个,它解决了原先无法避免的容器操作的装箱、拆箱问题。由于其重要性,它也成为了.NET面试中常见的问题之一,本节笔者将通过分析问题简要介绍泛型的基本原理。
  所涉及到的知识点
•    泛型的基本概念
•    实现泛型的基本原理
  分析问题
泛型的语法和概念非常类似于C++中的模板,泛型和C++中模板的设计是为了方便设计一些更加通用的类型,而在.NET中泛型还有另外一个重要作用,那就是避免容器操作中的装箱和拆箱动作。代码4-8是一个简单的泛型示例。
代码4-8  泛型示例:ArrayConvert.cs
namespace NET.MST.Fourth.GenericClass
{
    class MainClass
    {
        static void Main(string[] args)
        {
            //从开放类型到封闭类型
            GenericClass<String> gc = new GenericClass<String>("我是泛型");
            Console.WriteLine(gc);
            Console.Read();
        }
    }
    //一个简单的泛型类
    public class GenericClass<T>
    {
        T my;
        public GenericClass(T t)
        {
            my = t;
        }
        public override string ToString()
        {
            return my.ToString();
        }
    }
}
所有的泛型参数名称都以T开头,这是由微软在产品文档中提出的建议,作为一种编码的通用规范,笔者建议读者严格遵守这样的规范,类似的规范还有所有的接口名称都以I开头。
在代码4-8中,程序申明了一个泛型类型GenericClass<T>。不要被表面的复杂所迷惑,和.NET的众多类型一样,带泛型参数的类型同样是一个确定的类型,在不被指定的情况下,它直接继承自Syste.Ojbect类型,并且可以派生出其他类型。但是,泛型类型还是和普通类型有着一定的区别。通常泛型的类型被称为开放式类型,.NET的机制规定开放式类型不能被实例化,这样就确保了开放式类型的泛型参数类型在被指定时前,不会被实例化成任何对象(事实上.NET也没办法进行实例化,因为不确定需要分配多少内存给开放式类型)。在代码4-8的main方法中,指定了开放类型的实参,这个时候重新定义了一个新的封闭式类型GenericClass<String>,针对该类型的所有实例化都是合法的。
为开放式的类型提供泛型的实例导致了一个新的封闭类型的生成,但这并不代表新的封闭类型和开放类型有任何派生继承的关系,事实上,两者在类结构图上处于同一层次,并且两者之间没有什么关系。
在图4.4中,笔者构造了几个新的类型,并且用深、浅色区分了开放类型和闭合类型,读者可以清晰地看到,开放类型和闭合类型在类结构图中并没有任何区别,也没有相互间的联系。
最后读者需要了解的是,.NET在System.Collections.Generic命名空间下定义了诸如List<>、Dictionary<,>等泛型容器,并且在System.Array中定义了一些静态的泛型方法,读者应该在编写代码时充分利用已有的容器和算法,以提高开发和系统运行的效率。
微软公司的产品文档上鼓励程序员使用新的泛型容器和方法来代替.NET 1.1版本中的容器和方法,以提高程序的性能。
  答案
泛型类似于C++中的模板,允许程序员定义更通用的类型和算法,并且在具体使用时再生成具体的封闭类型。所有带泛型参数的类型都是一个开放式类型,它不能被实例化,但具备所有封闭类型的其他特性,本质上,它和封闭类型没有区别。

http://www.china-pub.com/508880
}JJ l/m8rsm13164110
f.M T6?+~Q13164110【书名】.NET程序员面试指南
【作者】朱毅 等 编著
【ISBN】978-7-121-07675-6
【出版社】电子工业出版社
【出版日期】2008年12月
【宣传语】
从面试的角度来梳理.NET程序员的技术功底。
以项目开发经理的眼光来审视编程知识的掌握。
【内容简介】
本书着重针对.NET技术职位的应聘者,在.NET框架各个技术类别中,选取最常出现在.NET面试中的问题,进行分析和解答,同时解释和剖析和该问题相关的.NET机制原理,帮助读者达到知其然更知其所以然的程度。本书几乎包揽了所有常见的面试题,从基础知识、数据库,再到比较流行的XML、测试方法和算法,是目前市场上唯一一本面试试题集锦。
全书配合了大量的图例及代码说明,非常适合正打算参加.NET技术职位的应聘和希望梳理.NET框架下技术点的读者阅读

原创粉丝点击