Sma*_*ery 5 c# generics refactoring interface
我目前正在重构我的代码,以便所有重要的类实现一个接口(用于单元可测试性).我遇到了一个实现IComparable(非模板化)的类; 就像是:
public MyClass : IComparable
{
public int CompareTo(object obj)
{
MyClass cObj = obj as MyClass;
if (cObj == null) { throw new ArgumentException(); }
// etc.
}
}
Run Code Online (Sandbox Code Playgroud)
我想要将它与它接口,并在我使用时使用泛型; 这样的事情:
public IMyClass : IComparable<IMyClass>
{
// Other methods here
}
public MyClass : IMyClass
{
public CompareTo<IMyClass>(IMyClass other)
{
...
}
// Other methods here
}
Run Code Online (Sandbox Code Playgroud)
但是,理想情况下,MyClass应该实现IComparable<MyClass>(然后MyClass应该实现的子类IComparable<MySubClass>).
所有这些都要问几个问题:
您如何看待我描述的方法?有没有更好的方法来进行这种重构?是否还有一点需要MyClass实施IComparable<MyClass>,或者因为我们已经实施了这一点是没有意义的IComparable<IMyClass>?我可以了解任何专业提示或"最佳"实践?
简短的回答:这取决于。
在您的具体示例中,我想说创建不必要的接口(在本例中)几乎总是错误的,IMyClass因为它只会为您创造工作。经验法则:仅当多个类实现接口时才使用接口。正如您所指出的,这个特定的接口甚至没有实现使您的类直接具有可比性的目标。
至于哪些类应该实现IComparable,通用的或其他的,这完全取决于您的比较需要是什么。如果始终在对基类的引用之间进行比较,则派生类不需要实现该接口,因为它永远不会被调用。
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |