当前位置: 首页 > news >正文

泛型回顾

泛型利用“参数化类型”将类型抽象,实现更为灵活的复用,类型安全,更高的效率,更强的约束。

C#泛型由CLR运行时支持,区别于C++的编译时模板机制。

C#动态泛型能力能够避免C++静态模板产生的代码膨胀问题。因为C#实例化的类型相同,JIT编译器会重复使用该类型。

C#泛型可以应用强大的反射技术。

C#泛型实现对类型的“显示约束”,不比C++模板基于签名的隐式约束所具有的的灵活性。

 

一个简单实现的泛型排序如下:

由于是排序,此处需要确定能比较,所以有where T : IComparable的约束。

publicclassMyClass<T> where T : IComparable

    {

        publicvoid BubbleSort(T[] array)

        {

            int length = array.Length;

            for (int i = 0; i <= length - 2; i++)

            {

                for (int j = length - 1; j >= 1; j--)

                {

                    if (array[j].CompareTo(array[j - 1])<0)

                    {

                        T temp = array[j];

                        array[j] = array[j - 1];

                        array[j - 1] = temp;

                    }

                }

            }

            for (int i = 0; i < array.Length; i++)

            {

                Console.WriteLine(array[i].ToString());

            }

        }

}

 

泛型可以有泛型类,泛型接口,泛型结构等类型级别的。还可以由泛型方法。

publicclassMyClass

    {

        publicvoid fun() {//普通方法 }

        publicvoid change<T>(T[] arr) where T : IComparable

        {

            //实现

        }

    }

 

转载于:https://www.cnblogs.com/hometown/p/3204228.html

相关文章:

  • 离线缓存
  • 字符串的提取
  • MySql数据库恢复(*frm)文件
  • Flex Fonts
  • Java菜鸟学习笔记(4)--常见编译运行错误汇集(不断更新)
  • XHTML--1
  • 如何快速去掉.svn文件夹?
  • js英雄对战小游戏 看看你的人品
  • mongodb在PHP下的应用学习笔记
  • 最长公共子序列问题(不连续)
  • Oracle动态执行表不可访问
  • 给公司服务器装web服务器,邮件服务器——安装SecureCRT
  • Set Keep-Alive Values---C到C#代码的转换
  • poj 2388 Who's in the Middle(快速排序求中位数)
  • com.javax.servlet 慢慢看完慢慢学完
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • angular2 简述
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ES6--对象的扩展
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • linux安装openssl、swoole等扩展的具体步骤
  • Making An Indicator With Pure CSS
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vagrant 添加本地 box 安装 laravel homestead
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 技术胖1-4季视频复习— (看视频笔记)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 前端之React实战:创建跨平台的项目架构
  • 数据科学 第 3 章 11 字符串处理
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​queue --- 一个同步的队列类​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (强烈推荐)移动端音视频从零到上手(上)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)memcache、redis缓存
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • . NET自动找可写目录
  • .Net MVC + EF搭建学生管理系统
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net中我喜欢的两种验证码
  • .py文件应该怎样打开?
  • .stream().map与.stream().flatMap的使用
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [bzoj2957]楼房重建
  • [dart学习]第四篇:函数
  • [ffmpeg] av_opt_set 解析
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [ICCV2017]Neural Person Search Machines
  • [Invalid postback or callback argument]昨晚调试程序时出现的问题,MARK一下