C#中泛型集合有什么用?泛型集合和数组区别是什么

2025-03-23 03:20:02 0

C#中泛型集合有什么用?泛型集合和数组区别是什么

本文目录

C#中泛型集合有什么用

满意答案^_^坐着鹅去上班^_^5级2009-05-31 “一次编码,多次使用“,这就是引入泛型的根源。在以前的C++中称为模板,C#泛型通过算法和数据结构支持独立编码。例如,泛型列表意味着,你不必再重写一个强类型集合。在本文中,作者将向你展示定义和使用泛型是多么容易的事情-请注意,长期以来泛型一直被认为是最高级和最困难的术语。 一、 简介泛型现在在任何一种语言中都被认为是一个高级的强有力的术语。当我在C++中第一次接触模板时,我对之有些疑惑。之后,我读了Bjarne Stroustrop的《The Design and Evolution of C++》,才发现模板的使用就象C中的宏和用之来取代的简单串替换模板一样容易。其实,模板和泛型是相同的东西-尽管它们的实现稍微不同。 C#泛型支持在使用点处才定义算法及其数据类型。在C#的一些早期版本中,我们可以证明没有泛型也可以工作,因为每种类型都是派生于一个公共基类型-object。这意味着程序员可以基于object类型定义一个栈类并且把一切东西放到该栈上(因为一切都派生于object)。然而,一个object栈意味着,Customer对象,Integer对象以及假想的对象都能被放置到同一个栈的实例上。结果是,开发者要子类化数据类型来把数据类型绑定到他们要与之交互的东西上去。例如,在编写定制的商业对象时,我们就建议定义派生于System.Collections.CollectionBase的强类型集合。原因很简单:基于object定义一切被认为是弱类型定义。 业界的高手们在数十年前就确信强类型优于弱类型,所以.NET最终支持强类型,这看上去是很自然的事情。强类型算法当然建议类型化参数-这正是我们在泛型中所用的东西。 十几年来,我们一直在使用字母T作为类型化参数的名字。这样,在任何泛型类使用者所提供的数据类型的地方,你都能够找到T。使用泛型的关键仅仅是提供这个T。定义泛型的关键在于实现一个方法或类,并且用特定数据类型来替换掉T。 C#中的泛型支持另外一些提炼。例如,一个方法或类可以有多个参数化的类型并且C#泛型还支持WHERE约束-它用来具体要求类型化参数的类型。例如,如果一个泛型类型必须实现接口IDisposable,那么C#泛型是支持实现这一限制的。在文章的最后我们还要看一下约束问题。 闲话少说,让我们言归正传。 有些人问我“面向对象编程(OOP)的承诺在哪里?“,我的回答是应该从两个方面来看OOP:你所使用的OOP和你创建的OOP。如果我们简单地看一下如果没有如例如Microsoft的.NET,Borland的VCL,以及所有的第三方组件这样的OO框架,那么很多高级的应用程序几乎就无法创建。所以,我们可以说OOP已经实现了它的承诺。不错,生产好的OOP代码是困难的并且可能是极具挫败性的;但是记住,你不必须一定要通过OOP来实现你的目标。因此,下面首先让我们看一下泛型的使用。 列表1显示出我们定义一个强类型集合的Customer对象是很容易的。 列表1 这个控制台应用程序包含一个Customer类和一个基于List《T》的强类型集合Customers。 using System; using System.Collections.Generic; using System.Text; namespace Generics{ class Program{ static void Main(string args){ List《Customer》 customers = new List《Customer》(); customers.Add(new Customer(“Motown-Jobs“)); customers.Add(new Customer(“Fatman’s“)); foreach (Customer c in customers) Console.WriteLine(c.CustomerName); Console.ReadLine();}}public class Customer{ private string customerName = ““; public string CustomerName{ get { return customerName; } this.customerName = customerName;}}} 补充: 注意,我们有一个强类型集合-List《Customer》-对这个集合类本身来说不需要写一句代码。

泛型集合和数组区别是什么

集合可放任意类型的元素,会自动增大,取出时要做类型转换泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换

泛型和泛型集合的区别

其实不应该说是两者的区别的,他们是一个包含的关系!在面向对象编程中有一个术语,叫泛化,而这个泛型的来源正是来源于这里!所谓的泛型就是指的存储的是其父类型,而实现使用时声明好子类型而已。不管是在java还是C#中,所有的类型都是基于object这个基础类型的。可以认为所有的其他类型都是object的泛型。而泛型集合指的就是将这些泛型放在一起的集合,但在使用前必须选进类型加以加说明。如List《T》就是一个泛型集合,可以将所有的泛合放在该集合中来。但前提时必须选声明T的类型,否则不能进行放入。这个涉及到了存储的问题,当初如果我们对于一些集合来说,比如我们可以声明这样的数组int a = new int;一旦声明,其大小不可改变,如果事选我们不知道要存入多少个,假定在存10个int,你用int a = new int;当然没有人反对,但问题是随着程序的运行我们可以要我不至10个,而这个数组却无法对其进行加长;或者你可能会说,管他呢int a = new int;肯定够用,但那样又有诸多的内在空间在浪费!所以我们考虑到了另一个类型array这个很不错的,但是由于array在放入到必须进行打包,取出时拆包,极大的浪费了cpu的利用。那么在.net framework2.0中添加了关于泛型的支持,也就是实现了IList接口,他既有array的特性又具有长度可以增大添小的特点,还是还是避免了打包问题,这也是在.net 2.0之后微软说,没有事后话大家都用arraylist等支持泛型的原因!事实上由于长期的习惯,泛型我们指的就是实现IList接口的数组之类的集合类型,所以我们在称泛型或是泛型集是时,实际上是同一概念!

java集合和泛型集合的区别

实不应该说是两者的区别的,他们是一个包含的关系!在面向对象编程中有一个术语,叫泛化,而这个泛型的来源正是来源于这里!所谓的泛型就是指的存储的是其父类型,而实现使用时声明好子类型而已。不管是在java还是C#中,所有的类型都是基于object这个基础类型的。可以认为所有的其他类型都是object的泛型。而泛型集合指的就是将这些泛型放在一起的集合,但在使用前必须选进类型加以加说明。

简述泛型集合框架相比于数组有什么好处

好处有:1、编译时的强类型检查;2、消除显示的类型强制转换;3、更好的代码复用性,比如实现泛型算法。

Java,是由Sun公司于1995年推出的编程语言。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。

从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Java applet。Java集合框架(Java Collections Framework,JCF)是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

重点讲解系统使用了哪些泛型集合

软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有各自的优缺点。如何使用好集合是我们在开发过程中必须掌握的技巧。不要小看这些技巧,一旦在开发中使用了错误的集合或针对集合的方法,应用程序将会背离你的预想而运行。 建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型。很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList(); al.Add(0); al.Add(1); al.Add(“mike“); foreach (var item in al) { Console.WriteLine(item); } 上面这段代码充分演示了我们可以将程序写得多么糟糕。 首先,ArrayList的Add方法接受一个object参数,所以al.Add(1)首先会完成一次装箱;其次,在foreach循环中,待遍历到它时,又将完成一次拆箱。 在这段代码中,整形和字符串作为值类型和引用类型,都会先被隐式地强制转型为object,然后在foreach循环中又被转型回来。 同时,这段代码也是非类型安全的:我们然ArrayList同时存储了整型和字符串,但是缺少编译时的类型检查。虽然有时候需要有意这样去实现,但是更多的时候,应该尽量避免。缺少类型检查,在运行时会带来隐含的Bug。集合类ArrayList如果进行如下所示的运算,就会抛出一个IvalidCastException: ArrayList al=new ArrayList(); al.Add(0); al.Add(1); al.Add(“mike“); int t = 0; foreach (int item in al) { t += item; } ArrayList同时还提供了一个带ICollection参数的构造方法,可以直接接收数组,如下所示: var intArr = new int {0, 1, 2, 3}; ArrayList al=new ArrayList(intArr); 该方法内部实现一样糟糕,如下所示(构造方法内部最终调用了下面的InsertRange方法): public virtual void InsertRange(int index, ICollection c) { if (c == null) { throw new ArgumentNullException(“c“, Environment.GetResourceString(“ArgumentNull_Collection“)); } if ((index 《 0) (index 》 this._size)) { throw new ArgumentOutOfRangeException(“index“, Environment.GetResourceString(“ArgumentOutOfRange_Index“)); } int count = c.Count; if (count 》 0) { this.EnsureCapacity(this._size + count); if (index 《 this._size) { Array.Copy(this._items, index, this._items, index + count, this._size - index); } object array = new object; } listT = null; } 输出为: 开始测试ArrayList: 耗时:2375 垃圾回收次数:26 开始测试List《T》: 耗时:220 垃圾回收次数:5 以上介绍了编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20),有关编写高质量代码建议1到建议157,本完整会持续更新,敬请关注,谢谢。

泛型集合与非泛型集合的异同

简单来说,一个是弱类型,一个是强类型所谓的弱类型指的是无法在应用程序编译期间得到检查,如Array 对象,你可以往这个对象中添加数字和字符串都没有问题。但在遍历操作时可以会涉及到类型转换,在不同类型转换时有可能会出现类型转换时的异常。而强类型如泛型,它支持在编译期间的检查。如List《string》标明我们只能往List集合中存储string 字符串类型,一旦添加其它类型则会在编译时就会得到错误的提示。

集合和泛型集合和数组区别

集合可放任意类型的元素,会自动增大,取出时要做类型转换泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换

C#中泛型集合有什么用?泛型集合和数组区别是什么

本文编辑:admin

更多文章:


impala是什么意思(impala关键字作为字段)

impala是什么意思(impala关键字作为字段)

本文目录impala关键字作为字段impala中date用什么类型impala关键字作为字段是由于impala建表时候字段使用了location关键字的原因。不管加什么符号(’或者 `),都会报错。是location占用了impala的关键

2025年2月27日 06:20

coincidence是什么意思(coincidence的中文是什么意思)

coincidence是什么意思(coincidence的中文是什么意思)

本文目录coincidence的中文是什么意思coincidence是什么意思coincidence什么意思coincidence的中文是什么意思Coincidence: a. 同时发生的 n. 巧合 例句与用法: 1. What a c

2025年3月3日 01:20

bear什么意思中文意思(bear中文是什么)

bear什么意思中文意思(bear中文是什么)

本文目录bear中文是什么bear中文是什么意思bear是什么意思 bear的中文意思是什么Bear是什么意思bear是什么意思bear中文什么意思bear中文是什么bear英 n. 熊;(在证券市场等)卖空的人;蛮横的人vt. 忍受;承担

2025年3月8日 20:30

oracle的存储过程写法(oracle的存储过程怎么写)

oracle的存储过程写法(oracle的存储过程怎么写)

本文目录oracle的存储过程怎么写oracle 存储过程怎么写~oracle存储过程怎么写循环Oracle存储过程如何编写oracle存储过程怎么写oracle的存储过程怎么写create or replace function page

2025年3月25日 07:20

ibatisnet(ibatisNET性能怎么样)

ibatisnet(ibatisNET性能怎么样)

本文目录ibatisNET性能怎么样初学者ibatisnet update的问题!ibatisnet用Log4net写日志,报错有没有好用的ibatisnet自动生成mapper.xml和entity的工具呀ibatis中jdbcType有

2025年3月25日 20:10

幻灯片制作时应当做到(如何制作让人满意的PPT,制作一份合格的PPT应该掌握哪些要领)

幻灯片制作时应当做到(如何制作让人满意的PPT,制作一份合格的PPT应该掌握哪些要领)

本文目录如何制作让人满意的PPT,制作一份合格的PPT应该掌握哪些要领幻灯片的制作制作PPT时,页面排版应该遵循哪些原则制作PPt模板需要具备哪些技能要做好一份ppt,应该怎样做如何制作让人满意的PPT,制作一份合格的PPT应该掌握哪些要领

2025年3月3日 00:00

自考的详细流程是什么?AI-自学教程

自考的详细流程是什么?AI-自学教程

本文目录自考的详细流程是什么AI-自学教程求ps教程自学网下载的视频教程!想要学word excel ,从最基础学起,有啥推荐的视频网站没有,或是谁有资源,谁有比较好的EXCEL的视频学习教程怎样快速学好pr自学视频剪辑和后期制作,有什么全

2025年4月2日 21:30

java框架书籍(来大神 帮我介绍两本关于(JAVA三大框架)的书籍)

java框架书籍(来大神 帮我介绍两本关于(JAVA三大框架)的书籍)

本文目录来大神 帮我介绍两本关于(JAVA三大框架)的书籍学习Java框架有什么好的书籍推荐一下!来大神 帮我介绍两本关于(JAVA三大框架)的书籍先学习j2se 要学习j2ee就要先学习j2se,刚开始学习j2se先建议不要使用IDE,然

2025年3月7日 06:40

c++ 中seekg(0)什么意思?seekg()和seelg()的用法

c++ 中seekg(0)什么意思?seekg()和seelg()的用法

本文目录c++ 中seekg(0)什么意思seekg()和seelg()的用法c++中关于文件指针中seekg()的问题c++文件读写 seekg函数超出范围问题f.seekg(0, ios::end);是什么意思“f.seekg(0, i

2025年3月29日 20:30

windows2000模拟器下载(安卓模拟器怎么下载下载后怎么安装在电脑上安装后又怎样才能将一站到底下下来并在电脑上玩)

windows2000模拟器下载(安卓模拟器怎么下载下载后怎么安装在电脑上安装后又怎样才能将一站到底下下来并在电脑上玩)

本文目录安卓模拟器怎么下载下载后怎么安装在电脑上安装后又怎样才能将一站到底下下来并在电脑上玩电脑上可以使用的【sisx模拟器】下载谁可以给我一个WINKAWAKS模拟器+经典游戏下载什么模拟器可以玩SIS格式的游戏知道的给个下载地址吧!安卓

2025年3月3日 16:50

ae特效模板免费下载(AE模板可以在哪些网站下载)

ae特效模板免费下载(AE模板可以在哪些网站下载)

本文目录AE模板可以在哪些网站下载有好的AE模板免费下载吗求推荐几个比较好的 ae特效素材AE模板可以在哪些网站下载有好的AE模板免费下载吗一般情况下免费的质量都不会太高,比如分辨率较低等。而且涉及一个使用权问题。建议支持原创的。如果想要有

2025年3月8日 10:30

elapsed(英语the elapsed cpu time怎么翻译)

elapsed(英语the elapsed cpu time怎么翻译)

本文目录英语the elapsed cpu time怎么翻译在C#中Elapsed是什麽意思环境中的elapsed days 是什么意思请教个oracle 10g awr报告里面db time和 Elapsed 的问题elapsed tim

2025年2月23日 01:20

特殊符号空白(谁知道一个空白的五角星的符号怎么打)

特殊符号空白(谁知道一个空白的五角星的符号怎么打)

本文目录谁知道一个空白的五角星的符号怎么打王者空白符号怎么打出来请问,王者荣耀的看不见的特殊符号是什么,我想弄王者荣耀名字特殊符号空白谁能复制几个空白字符给我 谢谢了百度输入法怎么打特殊符号空白字符打法谁知道一个空白的五角星的符号怎么打空白

2025年2月26日 09:30

salesforce公司简介(各位,对于salesforce非常陌生,谁能帮我通俗地解释一下吗百度百科里面ctl-c ctl-v的就不要来了)

salesforce公司简介(各位,对于salesforce非常陌生,谁能帮我通俗地解释一下吗百度百科里面ctl-c ctl-v的就不要来了)

本文目录各位,对于salesforce非常陌生,谁能帮我通俗地解释一下吗百度百科里面ctl-c ctl-v的就不要来了洛杉矶Action+sales是一家作什么的公司Salesforce-effectiveness是什么意思各位,对于sal

2025年2月9日 00:30

自己搭建局域网云桌面终端(自己在家怎么组建局域网)

自己搭建局域网云桌面终端(自己在家怎么组建局域网)

本文目录自己在家怎么组建局域网自己动手组建企业局域网如何组建局域网局域网办公,可不可以用云终端替代其他主机主机云终端解决方案怎么组建局域网,我是初学者,希望可以详解 ,谢谢 如何搭建一个多个地方共享的局域网自己的服务器怎么使用怎样自己搭建局

2025年2月16日 00:00

最好用的免费空间(免费空间哪个好用)

最好用的免费空间(免费空间哪个好用)

本文目录免费空间哪个好用哪个免费空间好用免费空间那个好用有什么好用的免费空间免费空间哪个好用使用主机屋免费空间已经有一段时间了,第一次知道主机屋是朋友推荐的,我申请了一个,使用后我感觉到主机屋免费主机是非常棒的。 访问速度非常快,不管是电信

2025年3月20日 05:30

session超时(关于Session超时的问题(C#))

session超时(关于Session超时的问题(C#))

本文目录关于Session超时的问题(C#)如何实现不刷新页面时的session超时控制Cookie的过期和Session的超时有什么区别session超时自动退出到登录页面怎么实现怎么设置session超时时间session超时怎么设置配

2025年3月3日 17:50

返回顶部下载(我是在http://www.lanrentuku.com/js/piaofu-837.html上下载的返回顶部代码,)

返回顶部下载(我是在http://www.lanrentuku.com/js/piaofu-837.html上下载的返回顶部代码,)

本文目录我是在http://www.lanrentuku.com/js/piaofu-837.html上下载的返回顶部代码,弹性返回顶部JS代码放在网页的哪里MIUI有快速回到顶部的快捷方式吗用HTML+JavaScript+CSS侧条工具

2025年3月9日 22:00

finebi帮助文档(最好的商业智能软件是什么,为什么)

finebi帮助文档(最好的商业智能软件是什么,为什么)

本文目录最好的商业智能软件是什么,为什么Fine BI为什么画出来的是求和图怎么用bi 数据分析,能否举个例子最好的商业智能软件是什么,为什么我觉得没有什么最好的啊什么的,商业智能软件最主要的就是看适不适合自己。商业智能软件(OurwayB

2025年3月31日 03:00

批处理if else语句(批处理 if else用法)

批处理if else语句(批处理 if else用法)

本文目录批处理 if else用法批处理问题 if else 中else后面要显示语句再执行一个语句怎么办,看下面示例批处理关于 if 和else的语法您好,请问您个问题,用批处理中的 if else 怎么样写出 判断oracle数据库开启

2025年3月3日 08:50

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索