• 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的专栏 - .

     

    我要啦免费统计
  • 相关阅读:
    2019年第二周作业
    2019年pta作业第二题——求最大值及其下标
    2019春第十一周作业
    2019春第十周作业
    2019年寒假作业3
    2019年寒假作业2
    2019年寒假作业1
    我的老师
    自说
    Day16
  • 原文地址:https://www.cnblogs.com/attilax/p/15199112.html
Copyright © 2020-2023  润新知