В настоящее время я выполняю рефакторинг своего кода, чтобы все важные классы реализовали интерфейс (для тестируемости модулей). Я наткнулся на класс, который реализует IComparable (не шаблонно); что-то вроде:
public MyClass : IComparable
{
public int CompareTo(object obj)
{
MyClass cObj = obj as MyClass;
if (cObj == null) { throw new ArgumentException(); }
// etc.
}
}
Я хочу связать его и использовать дженерики, пока я в нем; как то так:
public IMyClass : IComparable<IMyClass>
{
// Other methods here
}
public MyClass : IMyClass
{
public CompareTo<IMyClass>(IMyClass other)
{
...
}
// Other methods here
}
Но в идеале MyClass
должен реализовывать IComparable<MyClass>
(а затем подклассы MyClass
должны реализовывать IComparable<MySubClass>
).
Все это, чтобы задать несколько вопросов:
Что вы думаете о подходе, который я описал? Есть ли лучший способ сделать этот рефакторинг? Есть ли смысл в том, чтобы MyClass
также реализовывал IComparable<MyClass>
, или это бессмысленно, поскольку мы уже внедрили IComparable<IMyClass>
? Любые про-советы или "лучшие" практики, о которых я мог знать?