C#中泛型集合有什么用?泛型集合和数组区别是什么
本文目录
- C#中泛型集合有什么用
- 泛型集合和数组区别是什么
- 泛型和泛型集合的区别
- java集合和泛型集合的区别
- 简述泛型集合框架相比于数组有什么好处
- 重点讲解系统使用了哪些泛型集合
- 泛型集合与非泛型集合的异同
- 集合和泛型集合和数组区别
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 字符串类型,一旦添加其它类型则会在编译时就会得到错误的提示。
集合和泛型集合和数组区别
集合可放任意类型的元素,会自动增大,取出时要做类型转换泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换
更多文章:

coincidence是什么意思(coincidence的中文是什么意思)
2025年3月3日 01:20

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

java框架书籍(来大神 帮我介绍两本关于(JAVA三大框架)的书籍)
2025年3月7日 06:40

c++ 中seekg(0)什么意思?seekg()和seelg()的用法
2025年3月29日 20:30

windows2000模拟器下载(安卓模拟器怎么下载下载后怎么安装在电脑上安装后又怎样才能将一站到底下下来并在电脑上玩)
2025年3月3日 16:50

elapsed(英语the elapsed cpu time怎么翻译)
2025年2月23日 01:20