我正在实现一个比较目录树的类(在C#中).起初我在类的构造函数中实现了实际的比较.像这样:
DirectoryComparer c = new DirectoryComparer("C:\\Dir1", "C:\\Dir2");
但是在构造函数中执行可能的冗长操作并不感觉"正确".另一种方法是将构造函数设为私有,并添加如下静态方法:
DirectoryComparer c = DirectoryComparer.Compare("C:\\Dir1", "C:\\Dir2");
你怎么看?你期望构造函数"快速"吗?第二个例子是更好的还是只是使类的使用复杂化?
BTW:
我不会将任何答案标记为已被接受,因为我认为没有正确的答案,只有偏好和品味.
编辑:
只是为了澄清我的例子.我不仅对目录不同感兴趣,我也对它们的区别(哪些文件)感兴趣.所以一个简单的int返回值就不够了.cdragon76.myopenid.com的答案实际上非常接近我想要的(+1给你).
我认为两者的结合是"正确的"选择,因为我希望Compare方法返回比较结果,而不是比较器本身.
DirectoryComparer c = new DirectoryComparer(); int equality = c.Compare("C:\\Dir1", "C:\\Dir2");
......正如Dana所提到的,.Net中有一个反映这种模式的IComparer接口.
所述IComparer.Compare因为使用的IComparer类是主要与分拣方法返回一个int.一般模式虽然适合问题的问题:
构造函数使用(可选)"配置"参数初始化实例
比较方法采用两个"数据"参数,比较它们并返回"结果"
现在,结果可以是int,bool,diff的集合.无论什么适合需要.
我更喜欢第二个.
我希望构造函数能够实现类.方法比较实现了它的设计目的.
我认为界面可能就是你所追求的.我将创建一个表示目录的类,并实现DirectoryComparer接口.该接口将包括比较方法.如果C#已经有一个Comparable接口,你也可以实现它.
在代码中,您的电话将是:
D1 = new Directory("C:\"); .. D1.compare(D2);