WEB开发网
开发学院软件开发C语言 Effective C# 原则49:为C#2.0做好准备 阅读

Effective C# 原则49:为C#2.0做好准备

 2009-02-19 08:17:15 来源:WEB开发网   
核心提示: public class BinaryTree < ValType > whereValType : IComparable < ValType >{}使用这一定义,使用BinaryTree的实例,Effective C# 原则49:为C#2.0做好准备(5),如何

public class BinaryTree < ValType > where
 ValType : IComparable < ValType >
{
}

使用这一定义,使用BinaryTree的实例,如何使用了一个没有实现IComparable 接口的类型时是不能通过编译的。你可以指明多个约束。假设你想限制你的BinaryTree成为一个支持ISerializable的对象。你只用简单的添加更多的限制就行了。注意这些接口以及限制可以在范型上很好的使用:

public class BinaryTree < ValType > where
    ValType : IComparable < ValType > ,
 ValType : ISerializable
{
}

你可以为每个个实例化的类型指明一个基类以及任何数量的接口集合。另外,你可以指明一个类必须有一个无参数的构造函数。

限制同样可以提供一些更好的好处:编译器可以假设这些在你的范型类中的对象支持指定列表中的某些特殊的接口(或者是基类方法)。如何不使用任何限制时,编译器则只假设类型满员System.Object中定义的方法。你可能须要添加强制转换来使用其它的方法,不管什么时候你使用一个不在 System.Object对象里的方法时,你应该在限制集合是写下这些需求。

约束指出了另一个要尽量使用接口的原因(参见原则19):如果你用接口来定义你的方法,它会让定义约束变得很简单。

迭代也是一个新的语法,通常习惯上用于少代码。想像你创建一些特殊的新容器类。为了支持你的用户,你须要在集合上创建一些方法来支持逆转这些集合以及运行时对象。

目前,你可能通过创建一个实现IEnumerator了的类来完成这些。IEnumerator 包含两个方法,Reset和MoveNextand,以及一个属性:Current。另外,你须要添加IEnumerable来列出集合上所有实现了的接口,以及它的GetEnumerator方法为你的集合返回一个IEnumerator。在你写写完了以后,你已经写了一个类以及至少三个额外的函数,同时在你的主类里还有一些状态管理和其它方法。为了演示这些,目前你须要写这样一页的代码,来处理列表的枚举:

上一页  1 2 3 4 5 6  下一页

Tags:Effective 原则 做好

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接