interfaz C#
Interfaz C#
En este tutorial, aprenderemos sobre la interfaz de C# con la ayuda de ejemplos.
En C#, una interfaz es similar a una clase abstracta. Sin embargo, a diferencia de las clases abstractas, todos los métodos de una interfaz son totalmente abstractos (método sin cuerpo).
Usamos el interface
palabra clave para crear una interfaz. Por ejemplo,
interface IPolygon {
// method without body
void calculateArea();
}
Aquí,
- IPolígono es el nombre de la interfaz.
- Por convención, la interfaz comienza con I para que podamos identificarla con solo ver su nombre.
- No podemos usar modificadores de acceso dentro de una interfaz.
- Todos los miembros de una interfaz son públicos de forma predeterminada.
- Una interfaz no permite campos.
Implementación de una interfaz
No podemos crear objetos de una interfaz. Para usar una interfaz, otras clases deben implementarla. Igual que en la herencia de C#, usamos :
símbolo para implementar una interfaz. Por ejemplo,
using System;
namespace CsharpInterface {
interface IPolygon {
// method without body
void calculateArea(int l, int b);
}
class Rectangle : IPolygon {
// implementation of methods inside interface
public void calculateArea(int l, int b) {
int area = l * b;
Console.WriteLine("Area of Rectangle: " + area);
}
}
class Program {
static void Main (string [] args) {
Rectangle r1 = new Rectangle();
r1.calculateArea(100, 200);
}
}
}
Salida
Area of Rectangle: 20000
En el ejemplo anterior, hemos creado una interfaz llamada IPolygon . La interfaz contiene un método calculateArea(int a, int b)
sin implementación.
Aquí, el Rectángulo clase implementa IPolygon . Y proporciona la implementación del calculateArea(int a, int b)
método.
Nota :Debemos proporcionar la implementación de todos los métodos de interfaz dentro de la clase que lo implementa.
Implementación de múltiples interfaces
A diferencia de la herencia, una clase puede implementar múltiples interfaces. Por ejemplo,
using System;
namespace CsharpInterface {
interface IPolygon {
// method without body
void calculateArea(int a, int b);
}
interface IColor {
void getColor();
}
// implements two interface
class Rectangle : IPolygon, IColor {
// implementation of IPolygon interface
public void calculateArea(int a, int b) {
int area = a * b;
Console.WriteLine("Area of Rectangle: " + area);
}
// implementation of IColor interface
public void getColor() {
Console.WriteLine("Red Rectangle");
}
}
class Program {
static void Main (string [] args) {
Rectangle r1 = new Rectangle();
r1.calculateArea(100, 200);
r1.getColor();
}
}
}
Salida
Area of Rectangle: 20000 Red Rectangle
En el ejemplo anterior, tenemos dos interfaces, IPolygon y IColor .
class Rectangle : IPolygon, IColor {
…
}
Hemos implementado ambas interfaces en el Rectangle clase separada por ,
.
Ahora, Rectangle
tiene que implementar el método de ambas interfaces.
Usando la variable de referencia de una interfaz
Podemos usar la variable de referencia de una interfaz. Por ejemplo,
using System;
namespace CsharpInterface {
interface IPolygon {
// method without body
void calculateArea(int l, int b);
}
class Rectangle : IPolygon {
// implementation of methods inside interface
public void calculateArea(int l, int b) {
int area = l * b;
Console.WriteLine("Area of Rectangle: " + area);
}
}
class Program {
static void Main (string [] args) {
// using reference variable of interface
IPolygon r1 = new Rectangle();
r1.calculateArea(100, 200);
}
}
}
Salida
Area of Rectangle: 20000
En el ejemplo anterior, hemos creado una interfaz llamada IPolygon . La interfaz contiene un método calculateArea(int l, int b)
sin implementación.
IPolygon r1 = new Rectangle();
Tenga en cuenta que hemos utilizado la variable de referencia de la interfaz IPolygon . Apunta a la clase Rectángulo que lo implementa.
Aunque no podemos crear objetos de una interfaz, aún podemos usar la variable de referencia de la interfaz que apunta a su clase implementada.
Ejemplo Práctico de Interfaz
Veamos un ejemplo más práctico de la interfaz C#.
using System;
namespace CsharpInterface {
interface IPolygon {
// method without body
void calculateArea();
}
// implements interface
class Rectangle : IPolygon {
// implementation of IPolygon interface
public void calculateArea() {
int l = 30;
int b = 90;
int area = l * b;
Console.WriteLine("Area of Rectangle: " + area);
}
}
class Square : IPolygon {
// implementation of IPolygon interface
public void calculateArea() {
int l = 30;
int area = l * l;
Console.WriteLine("Area of Square: " + area);
}
}
class Program {
static void Main (string [] args) {
Rectangle r1 = new Rectangle();
r1.calculateArea();
Square s1 = new Square();
s1.calculateArea();
}
}
}
Salida
Area of Rectangle: 2700 Area of Square: 900
En el programa anterior, hemos creado una interfaz llamada IPolygon . Tiene un método abstracto calculateArea()
.
Tenemos dos clases Cuadrado y Rectángulo que implementan el IPolygon interfaz.
La regla para calcular el área es diferente para cada polígono. Por lo tanto, calculateArea()
se incluye sin implementación.
Cualquier clase que implemente IPolygon debe proporcionar una implementación de calculateArea()
. Por lo tanto, la implementación del método en la clase Rectangle es independiente del método en la clase Square .
Ventajas de la interfaz C#
Ahora que sabemos qué son las interfaces, aprendamos por qué se usan las interfaces en C#.
- Al igual que las clases abstractas, las interfaces nos ayudan a lograr abstracción en C# .
Aquí, el métodocalculateArea()
dentro de la interfaz, no tiene cuerpo. Por lo tanto, oculta los detalles de implementación del método.
- Las interfaces proporcionan especificaciones que una clase (que lo implementa) debe seguir.
En nuestro ejemplo anterior, hemos usadocalculateArea()
como especificación dentro de la interfaz IPolygon . Esto es como establecer una regla de que debemos calcular el área de cada polígono.
Ahora cualquier clase que implemente el IPolygon la interfaz debe proporcionar una implementación para calculateArea() método.
- Las interfaces se utilizan para lograr la herencia múltiple en C#.
- Las interfaces proporcionan acoplamiento flexible (que no tiene o tiene un efecto mínimo en otras partes del código cuando cambiamos una parte de un código).
En nuestro ejemplo anterior, si cambiamos la implementación decalculateArea()
en el Cuadrado class no afecta al Rectangle clase.
Lenguaje C