随笔分类 -  C#泛型专题

摘要:[C#泛型系列文章]目录导航 第一部分:O'Reilly 出版的《C# Cookbook》泛型部分翻译 第二部分:O'Reilly 出版的《Programming C#》第四版泛型部分翻译 第三部分:构建可反转排序的泛型字典类 阅读全文
posted @ 2008-02-20 23:14 abatei 阅读(11851) 评论(28) 推荐(16) 编辑
摘要:大楼已经盖好,剩下的工作就是装修,装修好就可以入住了。从本文的题目得知,这是一个可反转排序的集合类,但我们只实现了降序插入功能,如果希望把升序转换为降序该怎么办呢?此例的解决方法是声明一个代表排序方向的属性Comparer,并加入一个sort方法,调用sort方法时根据Comparer属性进行排序: 阅读全文
posted @ 2008-02-20 10:38 abatei 阅读(1270) 评论(1) 推荐(1) 编辑
摘要:由于前面实现了IDictionary接口,现在实现IDictionary也就没什么困难的了,照葫芦画瓢。 首先改变类声明: 阅读全文
posted @ 2008-02-19 10:38 abatei 阅读(1351) 评论(0) 推荐(0) 编辑
摘要:7. 实现IDictionary接口 前面做了很多努力,现在终于可以实现IDictionary接口了。当然,之所以要先实现它,目的之一还是为了之前留下的一点遗憾:在foreach中使用DictionaryEntry访问集合中的元素。 需要注意,由于ReversibleSortedList类最主要的接口是泛型IDictionary接口,实现非泛型IDictionary接口主要是考虑到兼容性,试想... 阅读全文
posted @ 2008-02-18 09:36 abatei 阅读(1797) 评论(0) 推荐(1) 编辑
摘要:6. 实现IDictionary接口中的Keys和Values属性 现在我们可以着眼于IDictionary接口的实现。第4节中,专门针对这个接口做了一个最简化的例子,我们来回顾一下,它是怎么实现IDictionary接口中的Keys和Values属性的。 public ICollection Keys { //返回所有键的集合 get { //... 阅读全文
posted @ 2008-02-17 10:33 abatei 阅读(1127) 评论(0) 推荐(1) 编辑
摘要:5. 实现IEnumerable>接口 我们先来看看ReversibleSortedList类的定义: public class ReversibleSortedList : IDictionary, ICollection>, IEnumerable>, IDictionary, ICollection, IEnumerable 它一共实现了6个接口。... 阅读全文
posted @ 2008-02-16 10:00 abatei 阅读(2037) 评论(0) 推荐(0) 编辑
摘要:C#对集合类型有统一的规范。它的好处不言而喻,所有集合类都有一些统一的调用方法和属性,这使得学习成本大大降低。统一的规范就是通过接口来实现的(关于接口,如果不熟,请参考 http://www.enet.com.cn/eschool/video/c/30.shtml ),另一方面一些类也会直接调用这些标准接口,使得我们写出来的类有更好的兼容性。最典型的例子莫过于IEnumerable接口,只要实... 阅读全文
posted @ 2008-02-15 10:18 abatei 阅读(2155) 评论(0) 推荐(0) 编辑
摘要:3. 实现元素添加及自动扩展 您是一单位CEO,单位占地50亩,这几年在你的带领下,公司不断发展壮大,原来50亩地已经不够用。公司急需扩大地盘,这个现实问题摆在你面前,该怎么办?到旁边单位抢地?不行,现在是法制社会。有两个解决方案,第一是买一块50亩的地,这样你的公司就有两个办公地点,缺点是不能统一管理,两个地点的员工交流不顺畅。第二是买一块100亩的地,把原来的地卖掉,公司全部搬到新地点。这... 阅读全文
posted @ 2008-02-14 09:49 abatei 阅读(1149) 评论(2) 推荐(0) 编辑
摘要:你希望ReversibleSortedList类中的元素是以TKey(键)的顺序进行存储的,并且它即可以从小排到大,也可以从大排到小。当然,最佳方式就是在添加元素时找到合适的位置插入,插入后元素就已经按顺序排好。在一个有序数组中查找合适的插入点这样的算法并不困难, 阅读全文
posted @ 2008-02-13 10:39 abatei 阅读(2472) 评论(0) 推荐(1) 编辑
摘要:前段时间为了查找泛型资料,我翻译了O'Reilly 出版的《C# Cookbook》这本书的几个关于泛型的章节。其中“4.8 反转Sorted List里的内容”(见 http://cgbluesky.blog.163.com/blog/static/2412355820081211016581/ )这一节中有一个接近1300行代码的例子。 阅读全文
posted @ 2008-02-12 10:04 abatei 阅读(3485) 评论(7) 推荐(0) 编辑
摘要:9.6.1实现IComparable接口 像所有集合类一样,List实现了Sort()方法,它允许您对所有实现了IComparable接口的对象进行排序。在下一个例子中,您将修改Employee类以实现IComparable: public class Employee : IComparable 实现IComparable接口,Employee对象必须提供CompareTo()方法: pu... 阅读全文
posted @ 2008-02-11 10:21 abatei 阅读(2859) 评论(3) 推荐(0) 编辑
摘要:数组类型的一个典型问题是固定容量。如果您预先不知道数组将容纳多少对象,就会冒着给数组声明太小(溢出)或太大(浪费空间)的空间的风险。 您的程序可能让用户输入数据或从Web站点收集数据。当它发现对象(字符串,书,值等等),将把它们添加进数组,但您并不知道在这段时间内会收集多少数据。固定尺寸的数组并不是一个很好的选择,因为您并不知道需要多大的数组。 List类是一个根据需要动态增加尺寸的数组。它提... 阅读全文
posted @ 2008-02-10 10:27 abatei 阅读(3483) 评论(1) 推荐(0) 编辑
摘要:本文翻译自《Programming C#》 阅读全文
posted @ 2008-02-09 10:44 abatei 阅读(2371) 评论(0) 推荐(1) 编辑
摘要:近日在网上又发现一篇不错的关于C#泛型的文章,居然又是摘自O'Reilly 出版社的一本书,真是有缘啊!这本书是《Programming C#》第四版,很不错,已有中文版。我只翻译其中三节,由于在下英文及汉语水平有限,如果有看不懂的地方实属正常,请购买中文版观看。 阅读全文
posted @ 2008-02-08 10:35 abatei 阅读(2878) 评论(1) 推荐(0) 编辑
摘要:4.13 初始化泛型变量为它们的默认值 问题 您的泛型类包含一个变量,它的类型和类中定义的类型参数一样。在构造泛型类时,您希望这个变量被初始化为它的默认值。 解决方案 简单地使用default关键字把变量初始化为它的默认值: public class DefaultValueExample { T data = default(T); public b... 阅读全文
posted @ 2008-02-06 09:59 abatei 阅读(3258) 评论(0) 推荐(0) 编辑
摘要:4.11 在泛型字典类中使用foreach 问题 您希望在实现了System. Collections.Generic.IDictionary接口的类型枚举元素,如System.Collections.Generic.Dictionary 或 System.Collections.Generic.SortedList。 解决方案 最简单的方法是在foreach循环中使用KeyValuePair... 阅读全文
posted @ 2008-02-05 10:49 abatei 阅读(3691) 评论(2) 推荐(1) 编辑
摘要:本系列文章翻译O'Reilly 出版的《C# Cookbook》一书中的片段,仅供学习交流使用 4.9 使用泛型创建只读集合 问题 您希望类中的一个集合里的信息可以被外界访问,但不希望用户改变这个集合。 解决方案 使用ReadOnlyCollection包装就很容易实现只读的集合类。例子如,Lottery类包含了中奖号码,它可以被访问,但不允许被改变: public class Lotter... 阅读全文
posted @ 2008-02-04 10:02 abatei 阅读(4400) 评论(0) 推荐(0) 编辑
摘要:4.8 反转Sorted List里的内容 问题 您希望在数组和列表类型中可以反转sorted list里的内容同时又维持SortedList和SortedList类原来的功能。无论是SortedList还是泛型SortedList类都直接提供了完成这个功能的方法而又不需要重填列表。 解决方案 ReversibleSortedList类提供了这些功能,它基于SortedList类,所以拥有相同... 阅读全文
posted @ 2008-02-03 13:34 abatei 阅读(2007) 评论(3) 推荐(0) 编辑
摘要:本系列文章翻译O'Reilly 出版的《C# Cookbook》一书中的片段,仅供学习交流使用 4.6 链表的实现 问题 您需要链表数据结构,这样就可以很容易地添加和删除元素。 解决方案 使用泛型LinkedList类。下面的方法创建了一个LinkedList类,并往链表对象中添加节点,然后使用了几种方法从链表节点中获得信息。 public static void UseLinkedLi... 阅读全文
posted @ 2008-02-03 13:26 abatei 阅读(2736) 评论(1) 推荐(0) 编辑
摘要:本系列文章翻译O'Reilly 出版的《C# Cookbook》一书中的片段,仅供学习交流使用 4.5 使用相应的泛型版本替换Stack和Queue 问题 您希望通过将所有Stack和Queue对象替换为相应的泛型版本以提高应用程序的效率,并使得代码更易于使用。当结构体或其他值类型存储在这些数据结构中时,会导致装箱/拆箱操作,这时就需要这么做。 解决方案 使用System.Collection... 阅读全文
posted @ 2008-02-03 13:19 abatei 阅读(2675) 评论(2) 推荐(0) 编辑