La herència és un dels pilars fonamentals de la programació orientada a objectes (OOP). Permet crear una nova classe (classe derivada) que hereta els membres (propietats, mètodes, etc.) d'una classe existent (classe base). Això facilita la reutilització del codi i la creació de jerarquies de classes.
Conceptes Clau
- Classe Base (Superclasse): La classe de la qual s'hereten els membres.
- Classe Derivada (Subclasse): La classe que hereta els membres de la classe base.
- Membres Heretats: Propietats, mètodes i altres membres que es transmeten de la classe base a la classe derivada.
- Modificadors d'Accés: Controlen la visibilitat dels membres heretats (public, protected, private).
Sintaxi Bàsica
// Definició de la classe base
public class Animal
{
    public string Nom { get; set; }
    public void Menjar()
    {
        Console.WriteLine("L'animal està menjant.");
    }
}
// Definició de la classe derivada
public class Gos : Animal
{
    public void Bordar()
    {
        Console.WriteLine("El gos està bordant.");
    }
}Explicació del Codi
- 
Classe Base Animal:- Té una propietat Nom.
- Té un mètode Menjar().
 
- Té una propietat 
- 
Classe Derivada Gos:- Hereta la propietat Nomi el mètodeMenjar()de la classeAnimal.
- Defineix un mètode addicional Bordar().
 
- Hereta la propietat 
Exemple Pràctic
public class Program
{
    public static void Main(string[] args)
    {
        Gos meuGos = new Gos();
        meuGos.Nom = "Rex";
        meuGos.Menjar();
        meuGos.Bordar();
    }
}Sortida Esperada
Exercicis Pràctics
Exercici 1: Crear una Jerarquia de Classes
- 
Descripció: Crea una classe base Vehicleamb propietatsMarcaiModel, i un mètodeConduir(). Després, crea una classe derivadaCotxeque afegeixi una propietatNombreDePortesi un mètodeTocarClaxon().
- 
Solució: 
public class Vehicle
{
    public string Marca { get; set; }
    public string Model { get; set; }
    public void Conduir()
    {
        Console.WriteLine("El vehicle està conduint.");
    }
}
public class Cotxe : Vehicle
{
    public int NombreDePortes { get; set; }
    public void TocarClaxon()
    {
        Console.WriteLine("El cotxe està tocant el claxon.");
    }
}
public class Program
{
    public static void Main(string[] args)
    {
        Cotxe meuCotxe = new Cotxe();
        meuCotxe.Marca = "Toyota";
        meuCotxe.Model = "Corolla";
        meuCotxe.NombreDePortes = 4;
        meuCotxe.Conduir();
        meuCotxe.TocarClaxon();
    }
}Exercici 2: Herència i Polimorfisme
- 
Descripció: Crea una classe base Empleatamb una propietatNomi un mètodeTreballar(). Després, crea dues classes derivadesEnginyeriDissenyadorque sobreescriguin el mètodeTreballar()per mostrar missatges específics.
- 
Solució: 
public class Empleat
{
    public string Nom { get; set; }
    public virtual void Treballar()
    {
        Console.WriteLine("L'empleat està treballant.");
    }
}
public class Enginyer : Empleat
{
    public override void Treballar()
    {
        Console.WriteLine("L'enginyer està dissenyant un sistema.");
    }
}
public class Dissenyador : Empleat
{
    public override void Treballar()
    {
        Console.WriteLine("El dissenyador està creant un disseny.");
    }
}
public class Program
{
    public static void Main(string[] args)
    {
        Empleat[] empleats = new Empleat[2];
        empleats[0] = new Enginyer { Nom = "Anna" };
        empleats[1] = new Dissenyador { Nom = "Joan" };
        foreach (Empleat empleat in empleats)
        {
            Console.WriteLine($"{empleat.Nom} està treballant:");
            empleat.Treballar();
        }
    }
}Sortida Esperada
Anna està treballant: L'enginyer està dissenyant un sistema. Joan està treballant: El dissenyador està creant un disseny.
Errors Comuns i Consells
- 
Oblidar el Modificador virtualooverride:- Quan es vol sobreescriure un mètode de la classe base, assegura't que el mètode de la classe base estigui marcat com virtuali el mètode de la classe derivada comoverride.
 
- Quan es vol sobreescriure un mètode de la classe base, assegura't que el mètode de la classe base estigui marcat com 
- 
No Inicialitzar Propietats Heretades: - Recorda que les propietats heretades de la classe base també han de ser inicialitzades si és necessari.
 
- 
Confusió amb els Modificadors d'Accés: - Utilitza protectedsi vols que els membres siguin accessibles només dins de la classe base i les seves derivades.
 
- Utilitza 
Resum
En aquesta secció, hem après sobre la herència en C#, com crear classes base i derivades, i com utilitzar els membres heretats. També hem vist exemples pràctics i exercicis per reforçar els conceptes. La herència és una eina poderosa per a la reutilització del codi i la creació de jerarquies de classes, facilitant així el desenvolupament de programari modular i mantenible.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització
