在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
泛型类封装不是特定于具体数据类型的操作。泛型类最常用于集合,如链接列表、哈希表、堆栈、队列、树等,其中,像从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关。 对于大多数需要集合类的方案,推荐的方法是使用 .NET Framework 2.0 类库中所提供的类。 一般情况下,创建泛型类的过程为:从一个现有的具体类开始,逐一将每个类型更改为类型参数,直至达到通用化和可用性的最佳平衡。创建您自己的泛型类时,需要特别注意以下事项:
类型参数和约束的规则对于泛型类行为有几方面的含义,特别是关于继承和成员可访问性。请务必先理解一些术语,然后再继续进行。对于泛型类 Node<T>,,客户端代码可以通过指定类型参数引用该类,以创建封闭式构造类型 (Node<int>),或者可以让类型参数处于未指定状态(例如在指定泛型基类时)以创建开放式构造类型 (Node<T>)。泛型类可以从具体的、封闭式构造或开放式构造基类继承: C#
class BaseNode { }class BaseNodeGeneric<T> { } 非泛型(具体)类可以从封闭式构造基类继承,但无法从开放式构造类或裸类型参数继承,因为在运行时客户端代码无法提供实例化基类所需的类型变量。 C#
//No error
class Node1 : BaseNodeGeneric<int> { } 从开放式构造类型继承的泛型类必须为任何未被继承类共享的基类类型参数提供类型变量,如以下代码所示: C#
class BaseNodeMultiple<T, U> { }
从开放式构造类型继承的泛型类必须指定约束,这些约束是基类型约束的超集或暗示基类型约束: C#
class NodeItem<T> where T : System.IComparable<T>, new() { }class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { } 泛型类型可以使用多个类型参数和约束,如下所示: C#
class SuperKeyType<K, V, U>where U : System.IComparable<U> 开放式构造类型和封闭式构造类型可以用作方法参数: C#
void Swap<T>(List<T> list1, List<T> list2){ 泛型类是不变的。也就是说,如果输入参数指定 List<BaseClass>,则当您试图提供 List<DerivedClass> 时,将会发生编译时错误。 原文地址:http://msdn.microsoft.com/zh-cn/library/sz6zd40f(VS.80).aspx |
请发表评论