Simular la herencia múltiple con Extension Methods

21 ene. 2009

Una de las limitaciones de la plataforma .Net, es la ausencia de la herencia múltiple, es decir, que podamos heredar de dos clases diferentes al mismo tiempo. En ocasiones esta característica, presente en otros lenguajes como C++ nos podría ser muy útil, aunque es cierto que también presentaría otros problemas, entre los más importantes la complejidad y la ambigüedad que puede generar.

En C# podemos implementar múltiples interfaces, pero no nos resuelve el problema de repetir código y funcionalidades comunes si ya estamos heredando de una clase.

Los Extensión Methods, una nueva característica desde la versión 3.0, nos permiten simular la herencia múltiple.

Pongamos que tenemos dos clases que ya heredan de otra, y que por tanto no pueden heredar de más clases. Pero sí que podemos hacer que implementen una interfaz, e implementar los métodos comunes que deseamos como un “Extension Method” de esta inferfaz.

Veamos un ejemplo:

 

   42 public interface IArea

   43     {

   44         int Area{ get; set;}

   45     }

   46 

   47     public class A : ExistingBaseClass1, IArea

   48     {

   49        public int Area {get; set;}

   50     }

   51 

   52     public class B : ExistingBaseClass2, IArea

   53     {

   54          public int Area {get; set;}

   55     }

   56 

   57     public static class ICommonMethdsExtensions

   58     {

   59         public static void SetArea(this IArea iAreaObject,int largo,int ancho)

   60         {

   61             iAreaObject.Area = largo * ancho;

   62         }

   63     }

   64 

   65     public class Demo

   66     {

   67         public void UsageExaple()

   68         {

   69             A a = new A();

   70             a.SetArea(5,4);

   71         }

   72     }


comments powered by Disqus
subir