Как лучше всего решить эту проблему?Вот простая иерархия классов в F #:
[<AbstractClass>]
type BaseClass (name: string) =
member this.Name with get() = name
type FooClass (n, i: int) =
inherit BaseClass (n)
member this.Num with get() = i
type BarClass (n) = inherit BaseClass (n)
Мне нужно будет добавить к этой иерархии довольно много по мере продвижения проекта.Мне нужно приравнять экземпляры этих классов, проверяя, имеют ли они одинаковый тип и имеют одинаковое значение для Name
(а также то же значение для Num
, если оно FooClass
), поэтому ReferenceEquals не будет его обрезать,Каков наилучший способ сделать это?Должен ли я заставить BaseClass
наследовать IComparable, и если да, то как мне тогда обращаться с типами, которые наследуются от BaseClass
, и иметь дополнительные поля для проверки?Другой способ сделать это - создать класс IComparer, который будет проверять каждый отдельный класс, но я действительно хочу, чтобы код был в соответствующем классе, а не в компараторе