Les interfícies són una part fonamental de la programació orientada a objectes en C#. Proporcionen una manera de definir un contracte que les classes poden implementar. Aquest contracte especifica els mètodes, propietats, esdeveniments i indexadors que una classe ha de proporcionar.

Conceptes Clau

  1. Definició d'Interfície: Una interfície és una col·lecció de definicions de membres sense implementació.
  2. Implementació d'Interfície: Una classe o estructura que implementa una interfície ha de proporcionar una implementació per a tots els membres de la interfície.
  3. Polimorfisme: Les interfícies permeten el polimorfisme, ja que una classe pot ser tractada com una instància de qualsevol interfície que implementi.
  4. Herència Múltiple: A diferència de les classes, una classe pot implementar múltiples interfícies.

Definició d'una Interfície

Una interfície es defineix utilitzant la paraula clau interface. Aquí tens un exemple bàsic:

public interface IVehicle
{
    void Start();
    void Stop();
    int Speed { get; set; }
}

En aquest exemple, IVehicle és una interfície que defineix tres membres: dos mètodes (Start i Stop) i una propietat (Speed).

Implementació d'una Interfície

Una classe que implementa una interfície ha de proporcionar una implementació per a tots els membres de la interfície. Aquí tens un exemple:

public class Car : IVehicle
{
    public int Speed { get; set; }

    public void Start()
    {
        Console.WriteLine("Car started.");
    }

    public void Stop()
    {
        Console.WriteLine("Car stopped.");
    }
}

En aquest exemple, la classe Car implementa la interfície IVehicle i proporciona implementacions per als mètodes Start i Stop, així com per a la propietat Speed.

Polimorfisme amb Interfícies

Les interfícies permeten el polimorfisme, ja que una instància d'una classe que implementa una interfície pot ser tractada com una instància d'aquesta interfície. Aquí tens un exemple:

IVehicle myCar = new Car();
myCar.Start();
Console.WriteLine($"Speed: {myCar.Speed}");
myCar.Stop();

En aquest exemple, myCar és una instància de Car però es tracta com una instància de IVehicle.

Herència Múltiple amb Interfícies

Una classe pot implementar múltiples interfícies. Aquí tens un exemple:

public interface IEngine
{
    void StartEngine();
    void StopEngine();
}

public class Motorcycle : IVehicle, IEngine
{
    public int Speed { get; set; }

    public void Start()
    {
        Console.WriteLine("Motorcycle started.");
    }

    public void Stop()
    {
        Console.WriteLine("Motorcycle stopped.");
    }

    public void StartEngine()
    {
        Console.WriteLine("Engine started.");
    }

    public void StopEngine()
    {
        Console.WriteLine("Engine stopped.");
    }
}

En aquest exemple, la classe Motorcycle implementa tant IVehicle com IEngine.

Exercicis Pràctics

Exercici 1: Definir i Implementar una Interfície

  1. Defineix una interfície IShape amb els següents membres:

    • Un mètode double Area().
    • Un mètode double Perimeter().
  2. Implementa la interfície IShape en una classe Rectangle amb les següents propietats:

    • double Width.
    • double Height.
  3. Proporciona implementacions per als mètodes Area i Perimeter en la classe Rectangle.

Solució

public interface IShape
{
    double Area();
    double Perimeter();
}

public class Rectangle : IShape
{
    public double Width { get; set; }
    public double Height { get; set; }

    public double Area()
    {
        return Width * Height;
    }

    public double Perimeter()
    {
        return 2 * (Width + Height);
    }
}

Exercici 2: Polimorfisme amb Interfícies

  1. Defineix una interfície IAnimal amb els següents membres:

    • Un mètode void MakeSound().
  2. Implementa la interfície IAnimal en dues classes: Dog i Cat.

  3. Crea una llista d'objectes IAnimal que continguin instàncies de Dog i Cat. Itera sobre la llista i crida al mètode MakeSound per a cada objecte.

Solució

public interface IAnimal
{
    void MakeSound();
}

public class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Woof!");
    }
}

public class Cat : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Meow!");
    }
}

public class Program
{
    public static void Main()
    {
        List<IAnimal> animals = new List<IAnimal>
        {
            new Dog(),
            new Cat()
        };

        foreach (IAnimal animal in animals)
        {
            animal.MakeSound();
        }
    }
}

Resum

En aquesta secció, hem après què són les interfícies, com es defineixen i implementen, i com permeten el polimorfisme i la implementació múltiple. Les interfícies són una eina poderosa en C# que permeten definir contractes clars i reutilitzables per a les classes. En el següent tema, explorarem els delegats i els esdeveniments, que són fonamentals per a la programació orientada a esdeveniments en C#.

© Copyright 2024. Tots els drets reservats