CLR via C#(16)--泛型】的更多相关文章

泛型就像是一个模板,常常定义一些通用的算法,具体调用时再替换成实际的数据类型,提高了代码的可重用性. 一.初识泛型 1. 简单实例 以最常用的FCL中的泛型List<T >为例: static void Main(string[] args)       {           List<int> num = new List<int>();           num.Add(1);           num.Add(3);           int num1 =…
使用泛型的好处是“代码重用”,极大的提高了开发效率,泛型为开发者提供了以下优势: 1,源代码保护  算法的源代码不需要提供给使用泛型算法的开发人员,使用c++模板的泛型技术需要提供.(目前c++模板的泛型技术了解较少) 2,类型安全    给泛型算法指定类型时,编译器能理解开发者意图,只有兼容类型能通过,不兼容的时候编译时候会报错. 3,更清晰的代码  由于编译器强制类型的安全性,减少源代码中必须进行的转型次数,使得代码容易维护和编写.例如:DateTime dt=dtList[0];从Date…
数组是允许将多个数据项当作一个集合来处理的机制.CLR支持一维数组.多维数组和交错数据(即由数组构成的数组).所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Object.这意味着数组始终是引用类型,是在托管堆上分配的.在你应用程序的变量或字段中,包含的是对数组的引用,而不是包含数组本身的元素.下面的代码更清楚的说明了这一点: Int32[] myIntegers; //声明一个数组引用 myIntegers = ] //创建含有100个Int32的数组 在第…
泛型(generic)是CLR和编程语言提供一种特殊机制,它支持另一种形式的代码重用,即"算法重用". 简单地说,开发人员先定义好一个算法,比如排序.搜索.交换等.但是定义算法的开发人员并不设定该算法要操作什么数据类型:该算法可广泛地应用于不同类型的对象.然后,另一个开发人员只要指定了算法要操作的具体数据类型,就可以使用这个现成的算法了. 泛型有两种表现形式:泛型类型和泛型方法. 泛型类型:大多数算法都封装在一个类型中,CLR允许创建泛型引用类型和泛型值类型,但不允许创建泛型枚举类型.…
在上一篇文章中,介绍了什么是泛型,以及泛型和非泛型的区别,这篇文章主要讲一些泛型的高级用法,泛型方法,泛型接口和泛型委托,协变和逆变泛型类型参数和约束性,泛型的高级用法在平时的业务中用的不多,多用于封装高级方法和一些底层封装,前几天读了一篇文章,如何选择网络上的技术文章,因为现在关于技术的文章可以说非常多,但是时间是有限的,如果花很多时间阅读了一篇文章却没有什么用,岂不是很浪费时间,所以第一步选择自己感兴趣的文章阅读,第二要把阅读过的文章尽可能实现一次,读书万遍不如走上一遍,第三尽量不读翻译性的…
在讨论泛型之前,我们先讨论一下在没有泛型的世界里,如果我们想要创建一个独立于被包含类型的类和方法,我们需要定义objece类型,但是使用object就要面对装箱和拆箱的操作,装箱和拆箱会很损耗性能,我们接下来会用一个示例来说明使用泛型和使用非泛型对值操作时的性能差距.但是如果使用泛型,也是同样的效果,不需要装箱和拆箱的同时泛型还保证了类型安全 言归正传,.Net自2.0以后就开始支持泛型,CLR允许创建泛型引用类型和泛型值类型,但不允许创建泛型枚举类型,此外,CLR还允许创建泛型接口和泛型委托.…
泛型,是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”. 简单的说,开发人员先定义好一个算法,比如排序.搜索.交换.比较或者转换等.但是,定义算法的开发人员并不设改算法要操作什么数据类型:改算法可广发地应用于不同类型的对象.然后,另一个开发人员只要指定了算法要操作的具体数据类型,就可以开始使用这个现成的算法了.例如,可用一个排序算法来操作Int32 和String等类型的对象. 1.大多数算法都封装在一个类型中,CLR允许创建泛型引用类型和泛型值类型,但不允许创建…
熟悉面向对象编程的开发人员都深谙面向对象的好处,其中一个好处是代码重用,它极大提高了开发效率.也就是说,可以派生出一个类,让他继承基类的所有能力.派生类只需要重写虚方法,或添加一些新方法,就可定制派生类的行为,使之满足开发人员的需求.泛型(generic)是clr和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”. 简单地说,开发人员先定义好算法,比如排序.搜索.交换.比较或者转换等.但是,定义算法的开发人员并不设定该算法要操作什么数据类型.然后,另一个开发人员只要制定了算…
1,什么是泛型? 答:泛型是类型的模板,类型是实例(对象)的模板.C#提供了5种泛型:类,接口,委托,结构和方法. 2,使用泛型有什么好处? 答:继承实现的是"代码重用",而泛型实现的是另一种形式的代码重用,即"算法重用".总结起来有以下优点: 1> 提高代码的可重用性. 2> 编译时的类型安全性.当使用一个不兼容的类型的时候,会在编译时就报错,而不用等到运行时再报错,提高了类型安全性. 3> 更佳的性能.当操作值类型实例的时候,使用泛型会减少值类…
第十二章 泛型 2014-06-15 初始泛型 12.3 泛型基础结构 12.3.1 开放类型与封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.9 可验证性合约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 参考 初识泛型[1][2] 返回 泛型(generic)是CLR和编程语言提供一种特殊机制,它支持另一种形式的…
一.无参属性 对于字段,强烈建议将所有的字段都设为private.如果允许用户或类型获取或设置状态信息,就公开一个针对该用途的方法.封装了字段访问的方法通常称为访问器(accessor)方法.访问器方法可选择对数据的合理性进行检查,确保对象的状态永远不被破坏.如下代码: private sealed class Employee { private String m_Name; private Int32 m_Age; public String GetName(){ return m_Name…
1.1. 泛型概述 2.0版C#语言和公共语言运行时(CLR)中增加了泛型.泛型将类型参数的概念引入.NETFramework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候.例如,通过使用泛型类型参数T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,如下所示: //Declarethegenericclass. publicclassGenericList<T> { voidAd…
一.泛型的本质 泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用. 二.Java泛型 Java 泛型是Java1.5新增的特性,JVM并不支持. 实现原理:Java源代码里面类型提供实现泛型功能,而编译后Class文件类型就变成原生类型(即类型被擦除掉),而在引用处插入强制类型转换以实现JVM对泛型的支持.本质是Java泛型只是Java提供的一个语法糖,底层 的JVM并不提供支持,Java中的泛型属于伪泛型. 但是编译后的字节码通过反射后…
前言 泛型允许你在编译时实现类型安全.它们允许你创建一个数据结构而不限于一特定的数据类型.然而,当使用该数据结构时,编译器保证它使用的类型与类型安全是相一致的.泛型提供了类型安全,但是没有造成任何性能损失和代码臃肿.在这方面,它们很类似于C++中的模板,不过它们在实现上是很不同的. 使用泛型集合 .NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义.各种不同的集合/容器类都被"参数化"了.为使用它们,只需简单地指定参数化的类型即可. Ar…
<精通C#(第6版)> 基本信息 原书名:Pro C# 5.0 and the .NET 4.5 framework,sixth edition 作者: (美)Andrew Troelsen 译者: 姚琪琳 朱晔 肖逵 张大磊 出版社:人民邮电出版社 ISBN:9787115321817 上架时间:2013-6-22 出版日期:2013 年7月 开本:16开 页码:1 版次:1-1 所属分类:计算机 > 软件与程序设计 > C# 泵多关于 >>><精通C#(…
额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2442061.html http://www.cnblogs.com/pugang/archive/2011/11/09/2242380.html http://www.cnblogs.com/LoveJenny/archive/2012/03/13/2392747.html http://www.…
一些不常见确又很实用的代码块. 1.精确获取屏幕尺寸(例如:3.5.4.0.5.0寸屏幕) public static double getScreenPhysicalSize(Activity ctx) { DisplayMetrics dm = new DisplayMetrics(); ctx.getWindowManager().getDefaultDisplay().getMetrics(dm); double diagonalPixels = Math.sqrt(Math.pow(d…
msdn 解释如下: “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型. “逆变”则是指能够使用派生程度更小的类型. 解释的很正确,大致就是这样,不过不够直白. 直白的理解: “协变”->”和谐的变”->”很自然的变化”->string->object :协变.  “逆变”->”逆常的变”->”不正常的变化”->object->string 逆变.  上面是个人对协变和逆变的理解,比起记住那些派生,类型,原始指定,更大,更小之类的词语,个人认…
本系列笔记由常彦博整理,请知悉 目  录 一. Java技术基础......................................................................................................... 1 1.1编程语言.......................................................................................................…
package com.keke.demo; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Date;import java.util.HashSet;import java.util.LinkedList;im…
http://www.cnblogs.com/qixuejia/p/4383068.html 深入理解 C# 协变和逆变   msdn 解释如下: “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型. “逆变”则是指能够使用派生程度更小的类型. 解释的很正确,大致就是这样,不过不够直白. 直白的理解: “协变”->”和谐的变”->”很自然的变化”->string->object :协变.  “逆变”->”逆常的变”->”不正常的变化”->object…
Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚开始是一个edmx文件,现在的code first,ef轻量级.但是其他有的技术也是死掉了) Task具有线程执行的可控性,返回值,代码书写简单,性能好等特点. Task创建主要有三种方式 1.Task参数 Task t = new Task(() => { ; i < ; i++) { Cons…
新建一个checkcode.aspx文件,页面中不用写任何东西,在代码中,Page_Load中写入如下代码: string chkCode = string.Empty;        int ix, iy;        ix = 80;        iy = 24;        //颜色列表,用于验证码.噪线.噪点          Color[] color ={ Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange…
课程介绍 本课程是由猎豹移动大数据架构师,根据Java在公司大数据开发中的实际应用,精心设计和打磨的大数据必备Java课程.通过本课程的学习大数据新手能够少走弯路,以较短的时间系统掌握大数据开发必备语言Java,为后续大数据课程的学习奠定了坚实的语言基础.   适用人群 1.想学大数据没有语言基础的学员 2.想学大数据没有Java语言基础的学员 3.转行想学大数据的学员 4.了解Java,大数据Java知识体系不完整的学员   课程视频下载地址(视频完整,无加密) 链接:https://pan.…
  深入理解 C# 协变和逆变 msdn 解释如下: “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型. “逆变”则是指能够使用派生程度更小的类型. 解释的很正确,大致就是这样,不过不够直白. 直白的理解: “协变”->”和谐的变”->”很自然的变化”->string->object :协变.  “逆变”->”逆常的变”->”不正常的变化”->object->string 逆变.  上面是个人对协变和逆变的理解,比起记住那些派生,类型,原始指…
1.定义泛型类型或方法时,为类型指定的任何变量(比如T)都称为类型参数.使用泛型类型或方法时指定的具体数据类型称为类型实参. 2.System.Collections.Concurrent命名空间提供了线程安全的泛型集合类.Microsoft建议使用泛型集合类,不建议使用非泛型集合类. 3.具有泛型类型参数的类型称为开放类型,CLR禁止构造开放类型的任何实例.这类似于CLR禁止构造接口类型的实例.代码引用泛型类型时可指定一组泛型类型实参.为所有类型参数都传递了实际的数据类型,类型就成为封闭类型.…
终于讲到泛型了.当初看到这个书名,最想看的就是作者对泛型,委托,反射这些概念的理解.很多人对泛型的理解停留在泛型集合上,刚开始我也是,随着项目越做越多,对待泛型的认识也越来越深刻. 泛型的概念:泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行. 泛型的优势:源代码保护.类型安全.更加清晰的代码.更佳的性能. 原理:(关键字:开放类型,封闭类型)所有带泛型参数的类型都是一个开放式类型,它不能被实例化(类似接口),在具体使用时生成封闭类型(实际数据类型). 泛型…
面向对象编程一个好处就是“代码重用”,极大提高了开发效率.如是,可以派生出一个类,让它继承基类的所有能力,派生类只需要重写虚方法,或添加一些新的方法,就可以定制派生类的行为,使之满足开发人员的需求. 泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”.   简单地说,开发人员先定义好一个算法,比如排序.搜索.交换.比较或转换等.但是,定义算法的开发人员并不设定该算法要操作什么数据类型:该算法可以广泛地应用于不同类型的对象.然后,另一个开发人员只…
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Since:2017-09-22 End:.... Total Hours:... Degree Of Diffculty:2 Degree Of Mastery:2 Practical Level:2 Desired Goal:2 Archieve Goal:.... Gerneral Evaluat…
//创建一个一维数组 int[] myIntegers; //声明一个数组引用 myIntegers = new int[100]; //创建含有100个int的数组 //创建一个二维数组 double[,] myDoubles = new double[10, 20]; //创建一个三维数组 string[,,] myStrings = new string[5, 3, 10]; //创建交错数组 Point[][] myPolygons = new Point[3][]; myPolygon…