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:
IAnimal
define dos métodos:MakeSound
yMove
.IPet
define una propiedadName
y un métodoPlay
.
-
Implementación de Interfaces:
Dog
yCat
implementan ambas interfaces (IAnimal
yIPet
).- Cada clase proporciona su propia implementación de los métodos y propiedades.
-
Uso de Interfaces:
- Se crean instancias de
Dog
yCat
y se asignan a variables de tipoIPet
. - Se llama al método
Play
en ambas instancias. - Se utiliza el operador
as
para convertir las instancias aIAnimal
y se llama a los métodosMakeSound
.
- Se crean instancias de
Ejercicio Práctico
Ejercicio
-
Define una interfaz
IVehicle
con los siguientes miembros:- Un método
Start()
. - Un método
Stop()
. - Una propiedad
Speed
de tipoint
.
- Un método
-
Crea dos clases
Car
yBicycle
que implementen la interfazIVehicle
.Car
debe tener una propiedad adicionalFuelLevel
de tipoint
.Bicycle
debe tener una propiedad adicionalGear
de tipoint
.
-
Implementa los métodos y propiedades en ambas clases.
-
En el método
Main
, crea instancias deCar
yBicycle
, 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
Start
yStop
, y la propiedadSpeed
.
- Se define la interfaz con los métodos
-
Implementación de la Interfaz en
Car
yBicycle
:- Ambas clases implementan los métodos y la propiedad de la interfaz.
Car
tiene una propiedad adicionalFuelLevel
.Bicycle
tiene una propiedad adicionalGear
.
-
Uso de las Clases en el Método
Main
:- Se crean instancias de
Car
yBicycle
. - Se llaman a los métodos
Start
yStop
en 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