首页 > 代码库 > atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php

atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php

atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php

\

1. 泛型历史 1

由来 1

2. 泛型的机制编辑 1

机制 1

编译机制 2

3. 泛型方法定义1::前定义 2

4. 泛型方法定义2::后定义,方法也需要加<T>标签... 2

5. 调用泛型方法::: cls.<String>meth(); 2

6.  //反回值为范型 2

7. 参考 3

 

1. 泛型历史

泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事;泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。

 

由来

泛型编程最初诞生于C++中,由Alexander Stepanov[2]David Musser[3]创立。目的是为了实现C++STL标准模板库)。其语言支持机制就是模板(Templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。比如qsort泛化之后就变成了:

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

 

2. 泛型的机制编辑

机制

C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以"on-demand"的方式,发生在JIT编译时。

编译机制

1. 第一轮编译时,编译器只为Stack<T>(栈算法)类型产生泛型版IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符

2. JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换泛型版”IL代码与元数据中的T---进行泛型类型的实例化。CLR为所有类型参数为引用类型的泛型类型产生同一份代码;但如果类型参数为值类型,对每一个不同的值类型CLR将为其产生一份独立的代码。

 

3.  泛型方法定义1::前定义


    public static <atiType,retType> retType reduceO4(atiType obj, Func function) {

 

4. 泛型方法定义2::后定义,方法也需要加<T>标签...

 

 public void bindList2grid<T>(List<T> li, DataTable dt)
        {

 

5. 调用泛型方法::: cls.<String>meth();

6.  //反回值为范型

        public static T getValue<T>(object entity, string fieldName)

7. 参考

paip.使用泛型时未能找到类型或命名空间名称“T - attilax的专栏 博客频道 - CSDN.NET.htm

paip.自定义java 泛型类与泛型方法的实现总结 - attilax的专栏 - .

 

我要啦免费统计

atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php