TOC

This article is currently in the process of being translated into Czech (~73% done).

Třídy:

Dědičnost

One of the absolute key aspects of Object Oriented Programming (OOP), which is the concept that C# is built upon, is inheritance, the ability to create classes which inherits certain aspects from parent classes. The entire .NET framework is built on this concept, with the "everything is an object" as a result of it. Even a simple number is an instance of a class, which inherits from the System.Object class, although .NET helps you out a bit, so you can assign a number directly, instead of having to create a new instance of e.g. the integer class.

Tento předmět může být trochu obtížné pochopit, ale někdy pomáhá s některými příklady, takže začněte s jedním z těchto:

public class Animal
{
    public void Greet()
    {
        Console.WriteLine("Hello, I'm some sort of animal!");
    }
}

public class Dog : Animal
{

}

Nejprve definujeme třídu zvířat, která má jednoduchou metodu k pozdravu. Poté definujeme třídu psů a dvojtečku, abychom C# řekli, že třída Dog by měla dědit ze třídy Animals. Krásná věc je v tom, že to dává smysl i v reálném světě - pes je zjevně zvíře. Vyzkoušejte použití tříd:

Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();

Pokud spustíte tento příklad, zjistíte, že i když jsme pro třídu Dog neurčili metodu Greet (), stále ví, jak nás pozdravit, protože zdědí tuto metodu z třídy zvířat. Tento pozdrav je však trochu anonymní, takže si jej přizpůsobíme, když víme, jaké zvíře je:

public class Animal
{
    public virtual void Greet()
    {
        Console.WriteLine("Hello, I'm some sort of animal!");
    }
}

public class Dog : Animal
{
    public override void Greet()
    {
        Console.WriteLine("Hello, I'm a dog!");
    }
}

Kromě přidané metody na třídě Pes byste si měli všimnout dvou věcí: přidali jsme do virtuální třídy klíčové slovo "virtual" a na třídě Pes používám klíčové slovo přepsat "override".

V jazyce C# nemůžete přepisovat člena třídy, pokud není označen jako virtuální. Pokud chcete, můžete přistupovat ke zděděné metodě, a to i při přepsání, pomocí klíčového slova "base".

public override void Greet()
{
    base.Greet();
    Console.WriteLine("Yes I am - a dog!");
}

Metody však nejsou jedinou věcí, kterou je možné zdědit. Ve skutečnosti se do značné míry dají zdědit všichni členové třídy, včetně polí a vlastností. Jen si pamatujte pravidla viditelnosti, jak bylo popsáno v předchozí kapitole.

Dědictví není jen z jedné třídy do druhé - můžete mít celou hierarchii tříd, které zdědí od sebe. Například bychom mohli vytvořit třídu Puppy, která zdědí naše třída psů, která zase dědí z třídy zvířat. Co nemůžete udělat v C #, je nechat jednu třídu dědit z několika jiných tříd ve stejnou dobu. Vícenásobné dědictví, jak se tomu říká, není C # podporováno.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!