科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件彻底剖析C# 2.0泛型类的创建和使用

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在以前的C++中称为模板,C#泛型通过算法和数据结构支持独立编码。

作者:朱先忠 来源:天极开发 2007年11月12日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三、 实现一个泛型类

  一种合理的实现某种新功能的方法是在原有的事物上进一步构建。我们已经了解强类型集合,并知道一种不错的用来构建泛型类的技术是使用一个特定类并删除数据类型。也就是说,让我们定义一个强类型集合CustomerList,并且来看一下它要把什么东西转化成一个泛型类。

  列表2定义了一个类CustomerList。后面的部分把CustomerList转化成List<T>。

  列表2定义类CustomerList:

using System;
using System.Collections;
using System.Text;
namespace Generics{
 public class CustomerList : CollectionBase{
  public CustomerList() { }
  public Customer this[int index]{
   get { return (Customer)List[index]; }
   set { List[index] = value; }
  }
  public int Add(Customer value)
  {return List.Add(value);}
 }
}

  四、 定义类头

  如果我们定义一个泛型类,我们需要把类头转化成一个泛型类。所有我们需要做的是命名参数并且把类名改成某种泛型。List<T>只有一个参数T,并且因为我们在以一种向后兼容的方式工作,所以我们知道类名是List。列表3显示出列表2中类的新类头。

  列表3 一个泛型类头显示出参数化的参数T。

using System;
using System.Collections;
using System.Text;
namespace Generics{
public class List<T> : CollectionBase {}

  五、 实现泛型字段

  如果我们需要把任何字段转换成泛型字段,我们将只需简单地把它们的类型改变成T(或该字段所描述的任何参数)。泛型List不需要任何字段,但是假定存在一个私有的整型字段叫foo-我们将把它泛型化。我们将如下重新定义它:

private T foo;

  当参数T被填充到类中时,List T也将因foo被填充。

  六、 定义泛型方法

  接下来,我们为所需要的参数化类型定义其它一些特性。这包括属性,方法,和事件。在我们的实例中,在Customer出现的每一处,我们都用参数T替换它。完成后的泛型列表类显示于列表4中。

  列表4 一个基于System.Collections.CollectionBase的轻量级的参数化泛型列表类。

using System;
using System.Collections;
using System.Text;
namespace Generics{
 public class List<T> : CollectionBase {
  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);
  }
 }
}

  为了测试该定制列表,注释掉使用System.Collections.Generic命名空间一句并且把列表4中的List<T>使用在列表1的代码中;它将以同样的方式工作。

  全面地修改.NET的List<T>是不必要的而且它也包含远比我们的示例多得多的特性;但是列表4显示出这种机制对于定义定制泛型类是多么容易。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章