控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

浅谈.NET中泛型的基本原理

作者:未知 出处:cnblog 2012年09月04日 阅读:

 1 .NET为什么要引入泛型?

  说到.NET泛型,应该都不陌生,毕竟泛型是.NET 2.0中就推出的特性,各位博友应该都知道引入泛型的目的是为了解决装箱、拆箱带来的性能损失,说的当然没有错,但是不够“太具体”,确切来讲泛型解决了原先无法避免的容器操作的装箱拆箱问题。
 
  目的就说这么多吧,言简意赅,该说的说了,多说无益。
 
2.浅谈.NET泛型原理
  有过C++编程经验的博友对C++中的模板,一定不陌生,泛型的语法和概念和C++中的模板极其类似,在C++中模板的目的是为了设计更加通用的类型,在.NET中也是这样,当然还有另外一个重要的作用,就是前面所说的:避免容器操作中的装箱和拆箱操作!
 
  先写一个一段简单的代码来示例下,代码如下:
 
using System;
 
namespace 浅谈泛型的示例
{
    /// <summary>
    /// DebugLZQ
    /// http://www.cnblogs.com/DebugLZQ
    /// 定义一个简单泛型类
    /// </summary>
    public class SimpleGenericClass<T>
    {
        T my;
        public SimpleGenericClass(T t)
        {
            my = t;
        }
        public override string ToString()
        {
            return my.ToString();
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            SimpleGenericClass<string> genericClass = new SimpleGenericClass<string>("DebugLZQ");
            Console.WriteLine(genericClass);
 
            Console.ReadKey();
        }
    }
}
 
  首先,程序申明了一个泛型(类型)SimpleGenericClass<T>。注意编码规范:和所有的接口名称都以I开头一样所有的泛型参数都以T开头。
 
  不要被泛型表面的复杂迷惑,和.NET其他类型一样,带泛型参数的类型同样是一个确定的类型,在不被指定的情况下,它直接继承自System.Object类型,并且可以派生出其他类型。
  但是泛型类型和普通的类型还是有一定的区别的。通常泛型类型被称为“开放式类型”,.NET机制规定开放式类型不能被实例化,这样就确保了泛型(开放式类型)在参数类型被指定之前,不能被实例化成任何对象。 实际上,.NET也没有办法进行实例化,因为不能确定需要分配多少内存给开放式类型。 
 
  然后在Main方法中,指定了开放类型(泛型)的参数,这个时候重新定义了一个新的封闭类型SimpleGenericClass<string> ,针对该类型的所有实例化都是合法的。注意,虽然为开放类型提供泛型的参数导致了一个新的封闭类型的生成,但这不代表新的封闭类型和开放类型由任何派生继承的关系,事实上,两者在类结构上处于同一个层次,并且两者没有任何关系。
 
  最后说明下:在System.Collections.Generic名称空间下定义了一些诸如List<>、Dictionary<,>等泛型容器,并且在System.Array中定义了一些静态的泛型方法,MS鼓励使用新的泛型容器来代替.NET版中的容器和方法,以提高程序的性能。
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统