Introducción
En C#, una interfaz es un contrato que define un conjunto de métodos y propiedades que una clase debe implementar. Las interfaces son fundamentales para la programación orientada a objetos, ya que permiten definir comportamientos que pueden ser implementados por cualquier clase, independientemente de su posición en la jerarquía de herencia.
Conceptos Clave
- Definición de una Interfaz: Una interfaz se define utilizando la palabra clave
interface. - Implementación de una Interfaz: Una clase o estructura que implementa una interfaz debe proporcionar una implementación para todos los miembros de la interfaz.
- Polimorfismo: Las interfaces permiten el polimorfismo, lo que significa que una clase puede ser tratada como una instancia de una interfaz que implementa.
Definición de una Interfaz
Para definir una interfaz en C#, se utiliza la palabra clave interface seguida del nombre de la interfaz. Los nombres de las interfaces suelen comenzar con una "I" mayúscula por convención.
En este ejemplo, IAnimal es una interfaz que define dos métodos: MakeSound y Move.
Implementación de una Interfaz
Una clase que implementa una interfaz debe proporcionar una implementación para todos los métodos y propiedades definidos en la interfaz.
public class Dog : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Woof!");
}
public void Move()
{
Console.WriteLine("The dog runs.");
}
}En este ejemplo, la clase Dog implementa la interfaz IAnimal y proporciona implementaciones para los métodos MakeSound y Move.
Ejemplo Práctico
Vamos a crear un ejemplo más completo que incluya varias interfaces y clases que las implementen.
Definición de Interfaces
public interface IAnimal
{
void MakeSound();
void Move();
}
public interface IPet
{
string Name { get; set; }
void Play();
}Implementación de Interfaces
public class Dog : IAnimal, IPet
{
public string Name { get; set; }
public void MakeSound()
{
Console.WriteLine("Woof!");
}
public void Move()
{
Console.WriteLine("The dog runs.");
}
public void Play()
{
Console.WriteLine($"{Name} is playing with a ball.");
}
}
public class Cat : IAnimal, IPet
{
public string Name { get; set; }
public void MakeSound()
{
Console.WriteLine("Meow!");
}
public void Move()
{
Console.WriteLine("The cat walks gracefully.");
}
public void Play()
{
Console.WriteLine($"{Name} is playing with a string.");
}
}Uso de Interfaces
public class Program
{
public static void Main()
{
IPet myDog = new Dog { Name = "Buddy" };
IPet myCat = new Cat { Name = "Whiskers" };
myDog.Play();
myCat.Play();
IAnimal animalDog = myDog as IAnimal;
IAnimal animalCat = myCat as IAnimal;
animalDog.MakeSound();
animalCat.MakeSound();
}
}Explicación del Código
-
Definición de Interfaces:
IAnimaldefine dos métodos:MakeSoundyMove.IPetdefine una propiedadNamey un métodoPlay.
-
Implementación de Interfaces:
DogyCatimplementan ambas interfaces (IAnimalyIPet).- Cada clase proporciona su propia implementación de los métodos y propiedades.
-
Uso de Interfaces:
- Se crean instancias de
DogyCaty se asignan a variables de tipoIPet. - Se llama al método
Playen ambas instancias. - Se utiliza el operador
aspara convertir las instancias aIAnimaly se llama a los métodosMakeSound.
- Se crean instancias de
Ejercicio Práctico
Ejercicio
-
Define una interfaz
IVehiclecon los siguientes miembros:- Un método
Start(). - Un método
Stop(). - Una propiedad
Speedde tipoint.
- Un método
-
Crea dos clases
CaryBicycleque implementen la interfazIVehicle.Cardebe tener una propiedad adicionalFuelLevelde tipoint.Bicycledebe tener una propiedad adicionalGearde tipoint.
-
Implementa los métodos y propiedades en ambas clases.
-
En el método
Main, crea instancias deCaryBicycle, y llama a los métodos definidos en la interfazIVehicle.
Solución
public interface IVehicle
{
void Start();
void Stop();
int Speed { get; set; }
}
public class Car : IVehicle
{
public int Speed { get; set; }
public int FuelLevel { get; set; }
public void Start()
{
Console.WriteLine("Car is starting.");
}
public void Stop()
{
Console.WriteLine("Car is stopping.");
}
}
public class Bicycle : IVehicle
{
public int Speed { get; set; }
public int Gear { get; set; }
public void Start()
{
Console.WriteLine("Bicycle is starting.");
}
public void Stop()
{
Console.WriteLine("Bicycle is stopping.");
}
}
public class Program
{
public static void Main()
{
IVehicle myCar = new Car { Speed = 100, FuelLevel = 50 };
IVehicle myBicycle = new Bicycle { Speed = 20, Gear = 5 };
myCar.Start();
myCar.Stop();
myBicycle.Start();
myBicycle.Stop();
}
}Explicación de la Solución
-
Definición de la Interfaz
IVehicle:- Se define la interfaz con los métodos
StartyStop, y la propiedadSpeed.
- Se define la interfaz con los métodos
-
Implementación de la Interfaz en
CaryBicycle:- Ambas clases implementan los métodos y la propiedad de la interfaz.
Cartiene una propiedad adicionalFuelLevel.Bicycletiene una propiedad adicionalGear.
-
Uso de las Clases en el Método
Main:- Se crean instancias de
CaryBicycle. - Se llaman a los métodos
StartyStopen ambas instancias.
- Se crean instancias de
Conclusión
Las interfaces en C# son una herramienta poderosa para definir contratos que las clases deben cumplir. Permiten la implementación de polimorfismo y ayudan a diseñar sistemas más flexibles y mantenibles. En este módulo, hemos aprendido a definir e implementar interfaces, y hemos visto cómo utilizarlas en ejemplos prácticos. En el siguiente tema, exploraremos los delegados y eventos, que son fundamentales para la programación basada en eventos en C#.
Curso de Programación en C#
Módulo 1: Introducción a C#
- Introducción a C#
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
Módulo 2: Estructuras de Control
Módulo 3: Programación Orientada a Objetos
- Clases y Objetos
- Métodos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Conceptos Avanzados de C#
- Interfaces
- Delegados y Eventos
- Genéricos
- Colecciones
- LINQ (Consulta Integrada en el Lenguaje)
- Programación Asíncrona
Módulo 5: Trabajando con Datos
Módulo 6: Temas Avanzados
- Reflexión
- Atributos
- Programación Dinámica
- Gestión de Memoria y Recolección de Basura
- Multihilo y Programación Paralela
Módulo 7: Construcción de Aplicaciones
Módulo 8: Mejores Prácticas y Patrones de Diseño
- Estándares de Codificación y Mejores Prácticas
- Patrones de Diseño
- Pruebas Unitarias
- Revisión y Refactorización de Código
