学习C#泛型集合类型的心得体会

开发 后端
学习C#泛型集合类型过程是一个不断尝试和体会的过程,那么学习C#泛型集合类型需要注意什么呢?让我们看看本文和大家一起分享的学习体会吧。

学习C#泛型集合类型的时间不长,接触泛型也就不到一个月的时间.所以看过不少高人写的文章加上自己了解的一知半解.我想无论怎么说,只要在编程的时候你将泛型应用到自己的程序中,即使你根本不明白自己为什么要用它,我想这也代表你想更深入的了解C#的编程,而并不满足将自己的程序只写到if....else的程度.这并不意味着你会使用泛型就是高手了,这里只是说明C#泛型集合类型的使用是高手们都喜欢用的东西.

言归正传泛型在我理解就好比是一个袋子,可以装下任何东西.我们当然不希望用这个袋子又装好吃的又要装垃圾.打一个更形象的比方,去超市买一包饼干,当你结帐的时候服务员会给你一个袋子装这包饼干.但是对于我们来说饼干与饼干的包装袋都装到了这个大袋子里,而饼干是我们所需要的,包装袋子就是垃圾.这时就会引出一个概念,"装箱、拆箱".将包装袋装饼干的过程就叫"装箱",而我们拆包装吃饼干的过程叫"拆箱".显然这对于吃饼干来说是非常浪费时间的.所以我们可能会需要一个可以做自我提示的袋子,也就是说如果你想用这个袋子来装饼干,那么你用它来装糖果,它就会自动提示你,它已经被你指定成装饼干了.

上面的例子虽然不太贴切,但是对于理解泛型还是有些帮助的.

大概有以下几个C#泛型集合类型:

1. List,这是我们应用最多的泛型种类,它对应ArrayList集合。

2. Dictionary,这也是我们平时运用比较多的泛型种类,对应Hashtable集合。

3. Collection对应于CollectionBase

4. ReadOnlyCollection 对应于ReadOnlyCollectionBase,这是一个只读的集合。

5. Queue,Stack和SortedList,它们分别对应于与它们同名的非泛型类。

看一下这个类:

  1. PersonCollection  
  2.  
  3. public class PersonCollection : IList  
  4. {  
  5.     private ArrayList _Persons = new ArrayList();  
  6.     public Person this[int index]  
  7.     { get { return (Person) _Persons[index]; } }  
  8.     public int Add(Person item)  
  9.     {  
  10.         _Persons.Add(item);  
  11.         return _Persons.Count - 1;  
  12.     }  
  13.     public void Remove(Person item)  
  14.     { _Persons.Remove(item); }  
  15.  
  16.     object IList.this[int index]  
  17.     {  
  18.         get { return _Persons[index]; }  
  19.         set { _Persons[index] = (Person)value; }  
  20.     }  
  21.     int IList.Add(object item)  
  22.     { return Add((Person)item); }  
  23.     void IList.Remove(object item)  
  24.     { Remove((Person)item); }  
  25.  
  26. }  

这个类是Person类的操作类,可以自由的增加或删除Person类.如果现在要为其他的类写一个功能与这个类一样的操作类,相信只需要将Person类替换一下就可以了.不过在了解泛型之后你就可以这样来用.

  1. List﹤Person﹥ persons = new List﹤Person﹥();  
  2.  
  3. persons.Add(new Person());  
  4.  
  5. Person person = persons[0];   

比如,如果要将Person类换成Employee类,只需要像这样写.

  1. List﹤Employee﹥ employees= new List﹤Employee﹥();  
  2.  
  3. employees.Add(new Employee());  
  4.  
  5. Employee employee= employees[0];  

List是C#中已经定义好的泛型类,现在我们可以自己定义它.

  1. TypeHelper  
  2.  
  3. public class TypeHelper﹤T﹥  
  4.  
  5. {  
  6.   public String GetType(T t){  
  7.  
  8.     return "Type is "+t.GetType().toString();  
  9.   }  
  10. }  

这里的T只是一个类型的占位符,在实际应用的时候,将实际的类型替换掉T就可以.

  1. TypeHelper﹤Person﹥ typeHelper = new TypeHelper();  
  2.  
  3. typeHelper.GetType(Person);  

注意T只是一个占位符,实际上换上任何符号都可以,千万不要任为只有T可以做占位符.

有的时候我们必须要约束一下实际的类型,比如以下的泛型类.

C#泛型集合类型的使用基本内容就向你介绍到这里,希望对你了解和学习C#泛型集合类型有所帮助。

  1. CollectionHelper  
  2.  1public class CollectionHelper﹤T,V﹥  
  3.  
  4. {  
  5.  
  6.       private T Collec = new T();  
  7.  
  8.        public int IndexOf(V v){  
  9.  
  10.            return Collec.IndexOf(v);          
  11.  
  12.       }  
  13. }  

泛型类中的T,V显示不是随便什么类型都可以代替的,首先这个类型T必须具有IndexOf方法,V必须是一个引用类型.所以这个类要修改一下.

  1. CollectionHelper  
  2. public class CollectionHelper﹤T,V﹥ where T:IList  
  3.  
  4.      where V:class 
  5.  
  6. {  
  7.  
  8.    private T Collec = new List();  
  9.  
  10.    public int IndexOf(V v){  
  11.  
  12.      return Collec.IndexOf(v);          
  13.  
  14.        }  

where 是关键字,T是表示所要进行约束的类型.IList是表示要实现的接口,显示只要实现IList接口,就一定有IndexOf方法,V的约束是必须是一个类.

如果要求类型必须是一个值类型的参数,就需要使用struct.如果还需要将类型重新实例化就需要使用new()来进行限制,说明该类型必须要有一个无参的构造函数.

注意如果一个类型需要有多个约束进行限制,那么new()必须写在***面.

泛型也可以用到委托里叫泛型委托,不过对于委托本人不是很熟,相信都是大同小异.

C#泛型集合类型的学习体会和应用实例就向你介绍到这里,希望对你了解和学习C#泛型集合类型有所帮助。

【编辑推荐】

  1. C# 泛型使用心得浅析
  2. C# 泛型集合概念及应用浅析
  3. C# 泛型集合实例应用浅析
  4. 浅析C# Dictionary泛型集合
  5. C# 泛型编程基础实例详解
责任编辑:仲衡 来源: 百度空间
相关推荐

2010-04-07 11:36:56

JNCIP

2009-07-03 18:49:07

综合布线工程实施

2011-04-01 15:22:12

Zabbix配置安装

2009-11-04 14:45:18

接入网优化

2019-11-11 09:33:09

戴尔

2009-01-19 20:16:23

Oracle心得体会

2009-09-09 18:07:49

CCNA考试资料

2009-04-27 16:04:47

Windows 7微软操作系统

2009-08-28 14:49:19

DHCP服务器管理维护

2009-08-24 18:15:24

C# Dictiona

2009-08-24 17:27:05

C#泛型应用

2009-11-25 17:24:42

无线路由器

2009-08-24 17:58:19

C# 泛型集合

2013-03-20 09:27:33

C#泛型

2009-07-01 14:28:20

cisco1700路由器配置

2009-08-24 14:51:25

C# 泛型泛型类型

2022-05-24 15:55:37

避障小车华为

2009-08-24 15:38:21

C# 泛型数组

2009-08-24 14:20:13

C# 强制类型转换
点赞
收藏

51CTO技术栈公众号