INTERFACES C#

INTERFACES C#


En la documentación de Microsoft se encuentra esta definición: “Las interfaces escriben un grupo de funcionalidades relacionadas que pueden pertenecer a una clase o estructura.”

Las interfaces definen sin implementar una serie de propiedades, métodos, eventos o indexadores, esto define una especie de contrato que será implementado por una clase o estructura. Importante especificar que todos las definiciones especificadas en la interfaz deben ser públicas ya que deben ser accesibles por todos los tipos que la requieren en su especificación.

El uso de interfaces, puede permitir que el código sea mantenible, testeable y extensible. Importante recordar que uno de los principios de desarrollo del acrónimo SOLID tiene que ver con el manejo de las interfaces. Aunque no quiere decir que todo debe tener y ser manejado desde las interfaces.

Las interfaces se definen con la palabra reservada interface, ejemplo:
public interface INombre{}

Como recomendación, el nombre de la interface debe estar antepuesto por una I (de Interface). Esto le da legibilidad a nuestro código. En la definición de la interfaz no es necesario especificar el modificador de acceso, ya que automáticamente todos los miembros son públicos.

public interface INombre
{
string ObtenerNombre();
int CalcularEdad(int anio);
}

Cuando una clase o estructura desea implementar una interfaz, lo debe realizar de la siguiente manera:
public class NombreClase : INombre
{
public string ObtenerNombre()
{
return “Nombre”;
}

public int CalcularEdad(int anio)
{
return DateTime.Now.Year - anio;
}
}

En esta definición de clase se implementan los métodos definidos en la interfaz. Si esto no se realiza, el compilador generará un mensaje de error.

Es común desconocer o preguntarse cuál es la diferencia entre una interfaz y una clase abstracta. Las diferencias son:
1.   Las clases abstractas pueden implementar métodos o propiedades, las interfaces solo pueden declarar los miembros de la interfaz
2.    Las clases sólo pueden heredar de una clase abstracta. Las clases pueden implementar múltiples interfaces.
3.    Las clases abstractas pueden tener sus modificadores de acceso. Las interfaces definen para sus miembros un único modificador de acceso, público.
4.    Las interfaces no pueden tener constructores, destructores ni campos.

Hay 2 opciones para implementar interfaces:

1.   Implementar interfaz: Esta es la manera standard de implementar interfaces. Utilizaremos el ejemplo anterior:

            public interface INombre
{
string ObtenerNombre();
int CalcularEdad(int anio);
}

public class NombreClase : INombre
{
public string ObtenerNombre()
{
return “Nombre”;
}

public int CalcularEdad(int anio)
{
return DateTime.Now.Year - anio;
}
}

Al utilizar esta clase se  puede realizar de las siguientes 2 formas:
NombreClase nombreClase = new NombreClase();
string nombre = nombreClase.ObtenerNombre();

O

INombreClase nombreClase = new NombreClase();
string nombre = nombreClase.ObtenerNombre();

2.       Implementar interfaz explícitamente: Para utilizarlo de esta forma se debe especificar la interfaz seguido del método de interfaz a implementar: Interfaz. Método. Al realizarlo de esta manera, se puede implementar un método de la interfaz que comparte el nombre ya sea con la clase implementadora, o con otra interfaz que este implementando la clase. Ejemplo:

            public interface INombre
{
string ObtenerNombre();
int CalcularEdad(int anio);
}

public class NombreClase : INombre
{
public string ObtenerNombre()
{
return “Nombre + Apellido”;
}
public string INombreBlece.ObtenerNombre()
{
return “Nombre”;
}

public int CalcularEdad(int anio)
{
return DateTime.Now.Year - anio;
}
}

Para utilizar esta clase, se debe tener en cuenta el llamado al método:
NombreClase nombreClase = new NombreClase();
string nombre = nombreClase.ObtenerNombre(); //Utiliza el método propio de la clase

O

INombreClase nombreClase = new NombreClase();
string nombre = nombreClase.ObtenerNombre(); //Utiliza el método de la interface

Comentarios

Entradas populares de este blog

Clases POCO y Clases DTO

INTELLITEST