剖析C# 2.0泛型类的创建和使用 - .net语言 -

剖析C# 2.0泛型类的创建和使用

时间:2013-04-05 10:42:15   来源:   评论:加载中...   点击:加载中...
"一次编码,多次使用",这就是引入泛型的根源。在以前的C++中称为模板,C#泛型通过算法和数据结构支持独立编码。例如,泛型列表意味着,你不必再重写一个强类型集合。在本文中,作者将向你展示定义和使用泛型是多么...

七、 增加类型约束

最后要讨论的是约束问题。约束被应用于类或其它特性上并且使用下面的语法:

 

Where T : constraint_type


  例如,任何我们想要通过using语句所使用的,如一个SqlDataReader,必须实现Idisposable接口。这是因为如下方式使用的using语句:


using(Form f = new Form()){...}


  就象一个try..finally块一样工作-总是清除新创建的资源。其工作原理很简单,只需要CLR针对在该using语句中创建的对象发出一个到IDisposable.Dispose的调用即可。例如,在上面这一句中,一个新的表单被创建,并且在using语句退出之前即调用Form.Dispose。
要对一个泛型类施加以确保该类实现了接口IDisposable,我们将添加先行词where T:Idisposable。在列表4中的泛型列表上施加约束后,我们将重新修改列表4如下面的列表5所示。

列表5 增加一个约束到泛型类以确保我们的List<T>中的所有的值T实现接口Idisposable。


using System;
using System.Collections;
using System.Text;
namespace Generics{
 public class List<T> : CollectionBase where t : IDisposable{
  public List(){ }
  public T this[int index]{
   get { return (T)List[index]; }
   set { List[index] = value; }
  }
  public int Add(T value){return List.Add(value);}
 }
}


  先行词where的值可以是类,接口,结构,实现一个无参的公共构造器或有一个特定的基类的类。详见有关帮助文档。

八、 总结

泛型的设计是用来减少你重复实现的代码的次数-只需改变数据类型即可。因为抽象数据结构,如队列,栈和列表皆是典型的数据结构,所以存在针对这些东西的泛型类完全可以理解。你可以从.NET中派生大量的值-通过使用现有的泛型类,如在System.Collections.Generic命名空间中的那些。

可以肯定,在一段相当长的时间里,泛型将会象模式和重构等革新一样对开发带来越来越大的价值,而且新的数据结构能被转换成可重用的如泛型等的代码元素。



相关热词搜索:

 
上一篇:.NET Ajax的无刷新技术实例详解
下一篇:解析在ASP.NET中调用存储过程的方法
收藏 将此文推荐给朋友
分享到: