Estoy considerando utilizar una clase abstracta con todos los miembros abstractos en lugar de una interfaz para evitar la implementación explícita de la interfaz código de placa de caldera. Así que en lugar de¿Razones para no usar clase abstracta en lugar de interfaz?
type IMyInterface =
abstract Name : string
abstract Text : string
type MyClass() =
member __.Name = "name"
member __.Text = "text"
interface IMyInterface with
member this.Name = this.Name
member this.Text = this.Text
Tendría
[<AbstractClass>]
type MyAbstractClass() =
abstract Name : string
abstract Text : string
type MyClass() =
inherit MyAbstractClass()
override __.Name = "name"
override __.Text = "text"
Cualquier palabra de precaución o implicaciones que debería tener en cuenta aquí?
Si está tomando una decisión entre una interfaz y una clase base abstracta, también podría considerar el uso de ambas. Proporcione un tipo base abstracto del que los implementadores puedan * elegir * heredar y que implemente una interfaz. Luego, acepte referencias a la interfaz, en lugar de a ABC. Esto no funcionará en todos los escenarios (por ejemplo, su código realmente necesita código que está en el ABC para existir en cada implementación concreta, y no puede aceptar una implementación alternativa), pero a menudo puede ser una buena idea. –
@Merlyn Morgan-Graham - ¡Excelente sugerencia! Estoy probando este enfoque y hasta ahora está funcionando muy bien, dando lo mejor de ambos mundos. –