首页 > 代码库 > 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