Default interfaces Methods en C# 8.0 y Mix-ins.

csharp_logo

Mix-in es un patrón de diseño proveniente de lenguajes orientados a objetos que son interpretados. El término se refiere a un componente que ofrece funcionalidad única y exclusivamente para ser utilizada por otra clase a través de la herencia o importación. El mix-in no se considera una clase completa. Incluso es posible que el lenguaje que uses tenga mecanismos distintos para componer módulos y heredar funcionalidad (véase Ruby).

¿Qué es un Default Interface Method en C#?.

Un default interface method es un método implementado en una interfaz, disponible a partir de la versión 8 de C#, ejemplo:

Mix-Ins en C#.

Antes de la versión 8 de C# no existía la herencia de métodos implementados por otro componente que no fuera una clase. Las interfaces no ofrecían la posibilidad de implementar comportamiento, solo lo definían. Con la llegada de los métodos por defecto en las interfaces, esto cambio un poco. Ya podrías hablar de implementar interfaces que solo tienen el propósito de ofrecer sus métodos para ser usados por otras clases, pero, la cosa no funciona así. Para poder acceder a los métodos implementados en una interfaz dentro y fuera de la clase debes hacer un casteo explicito. No vas a tener la ilusión de que son métodos de instancia (como sucede con los métodos de extensión). Ejemplo:

 

Default interface methods no son herencia múltiple.

Nunca ha existido el concepto de herencia múltiple en C#, y parece que las cosas van a continuar así. Default interfaces methods es una iteración del uso de implementaciones explícitas de interface, funcionan exactamente igual, con la diferencia de donde se declara la implementación, que ahora puede ser en la interface o la clase que implementa.

Conclusiones.

Bueno, antes de redactar este artículo tenía la seguridad de que el concepto de mix-in era un equivalente de esta nueva característica de C#, al menos, no es así en su totalidad.  Esta característica nueva de C# puede ayudarte a reutilizar código, no la veas como el uso de módulos, no funciona así y no es para eso.