This article has been localized into Russian by the community.
Наследование
Один из абсолютно ключевых аспектов Объектно-Ориентированного программирования (ООП), встроенный в концепцию C#, это наследование, возможность создавать классы, наследующие определенные особенности родительских классов. Весь .NET framework построен на этой концепции, подразумевающей, что "все является объектом". Даже простое число является экземпляром класса, который наследуется от системы.Object class, хотя .NET полезно вам, поэтому вы можете присвоить число напрямую, вместо того, чтобы создавать новый экземпляр, например, integer class.
Этот предмет может быть трудноватым для понимания, но иногда помогают некоторые примеры, поэтому давайте начнем с простого из них:
public class Animal
{
public void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
}
Во-первых, мы определяем класс Animal с помощью простого метода для вывода приветствия. Затем мы определяем класс собаки, и через двоеточие мы говорим c#, что класс собаки должен наследовать от класса животных. Самое прекрасное в этом то, что это имеет смысл и в реальном мире - собака, очевидно, животное. Давайте попробуем использовать классы:
Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();
Если вы запустите этот пример, вы заметите, что даже если мы не определили метод Greet () для класса Dog, он все равно знает, как приветствовать нас, потому что он наследует этот метод от класса Animal. Однако это приветствие немного анонимно, поэтому давайте настроим его, когда узнаем, какое это животное:
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!");
}
}
Помимо добавленного метода в классе Dog, вы должны заметить две вещи: я добавил ключевое virtual слово в метод в классе Animal, а в классе Dog я использую ключевое слово override.
В C# нельзя переопределять член класса, если он не помечен как виртуальный. При необходимости можно получить доступ к унаследованному методу, даже переопределив его с помощью ключевого слова base.
public override void Greet()
{
base.Greet();
Console.WriteLine("Yes I am - a dog!");
}
Однако методы-это не единственное, что наследуется. Фактически, почти все члены класса будут наследоваться, включая поля и свойства. Просто помните правила обзорности, которые обсуждались в предыдущей главе.
Наследование происходит не только от одного класса к другому - у вас может быть целая иерархия классов, которые наследуются друг от друга. Например, мы могли бы создать класс Puppy, который наследует от нашего класса Dog, который, в свою очередь, наследует от класса Animal. В C# нельзя позволить одному классу наследовать от нескольких других классов одновременно. Множественное наследование, как его называют, не поддерживается C#.