Tengo dos clases que implementan ISomeBehavior. Ahora quiero que compartan la funcionalidad. Normalmente reemplazaría ISomeBehavior con una clase abstracta, como SomeBehaviorBase. El problema es que una de las subclases ya deriva de otra clase, y esa otra clase no es un software que poseemos. (Esto es C#, por lo que la herencia múltiple no es una opción). La subclase, que se deriva de la clase de terceros, no tiene implementación. Simplemente deriva de la clase de terceros e implementa ISomeBehavior, por lo que la clase de terceros se puede tratar de la misma manera que las otras subclases que implementan ISomeBehavior.¿Cómo pueden las subclases compartir el comportamiento cuando uno ya se deriva de una clase base diferente?
Lo que he hecho, por el momento, es implementar un método de extensión en ISomeBehavior. Ahora el código de consumo puede llamar al método. El problema con ese enfoque es que quiero obligar al código de llamada a usar este método de extensión. No puedo eliminar SomeMethod() de la interfaz, porque el método de extensión tiene que llamarlo finalmente.
¿Alguna idea sobre cómo permitir que dos clases compartan elegantemente el mismo comportamiento, cuando una de ellas ya proviene de otra clase de terceros? Nota: El patrón de diseño de estrategia suena como si tuviera sentido aquí, pero ese patrón se usa cuando el comportamiento varía entre las subclases. El comportamiento aquí no varía; solo necesita ser compartido. no http://www.codeproject.com/KB/architecture/smip.aspx
GJ
¿Qué es SomeMethod()? Solo lo menciona en el segundo párrafo, diciendo que no puede eliminarlo, pero sin dar ninguna idea sobre * por qué * desea eliminarlo. –
Quiero eliminar SomeMethod() para que el código del cliente no pueda usarlo. El método de extensión lo llamará sin embargo. Y el código del cliente llamará al método de extensión. El método de extensión es básicamente SomeMethod(), pero con dos parámetros adicionales. Esto permite que la extensión SomeMethod() realice algunos procesos antes de llamar a SomeMethod. –