Наследование является одним из трех основополагающих принципов объектно-ориентированного программирования, поскольку оно допускает создание иерархических классификаций. Благодаря наследованию можно создать общий класс, в котором определяются характерные особенности, присущие множеству связанных элементов. От этого класса могут затем наследовать другие, более конкретные классы, добавляя в него свои индивидуальные особенности.

В языке C# класс, который наследуется, называется базовым, а класс, который наследует, — производным. Следовательно, производный класс представляет собой специализированный вариант базового класса. Он наследует все переменные, методы, свойства и индексаторы, определяемые в базовом классе, добавляя к ним свои собственные элементы.

<p>Основы наследования</p>

Поддержка наследования в C# состоит в том, что в объявление одного класса разрешается вводить другой класс. Для этого при объявлении производного класса указывается базовый класс. Рассмотрим для начала простой пример. Ниже приведен класс TwoDShape, содержащий ширину и высоту двухмерного объекта, например квадрата, прямоугольника, треугольника и т.д.

// Класс для двумерных объектов,

class TwoDShape {

  public double Width;

  public double Height;

  public void ShowDimO {

    Console.WriteLine("Ширина и высота равны " +

          Width + " и " + Height);

  }

}

Класс TwoDShape может стать базовым, т.е. отправной точкой для создания классов, описывающих конкретные типы двумерных объектов. Например, в приведенной ниже программе класс TwoDShape служит для порождения производного класса Triangle. Обратите особое внимание на объявление класса Triangle.

// Пример простой иерархии классов,

using System;

// Класс для двумерных объектов.

class TwoDShape {

  public double Width;

  public double Height;

  public void ShowDim() {

    Console.WriteLine("Ширина и высота равны " +

            Width + " и " + Height);

  }

}

// Класс Triangle, производный от класса TwoDShape.

class Triangle : TwoDShape {

  public string Style; // тип треугольника

  // Возвратить площадь треугольника,

  public double Area() {

    return Width * Height / 2;

  }

  // Показать тип треугольника,

  public void ShowStyle() {

    Console.WriteLine("Треугольник " + Style);

  }

}

class Shapes {

  static void Main() {

    Triangle t1 = new Triangle();

    Triangle t2 = new Triangle();

    t1.Width = 4.0;

    t1.Height = 4.0;

    t1.Style = "равнобедренный";

    t2.Width = 8.0;

    t2.Height = 12.0;

    t2.Style = "прямоугольный";

    Console.WriteLine("Сведения об объекте t1: ");

    t1.ShowStyle(); 

    t1.ShowDim();

    Console.WriteLine ("Площадь равна " + t1.Area());

    Console.WriteLine();

    Console.WriteLine("Сведения об объекте t2: ");

    t2.ShowStyle();

    t2.ShowDim();

    Console.WriteLine("Площадь равна " + t2.Area());

  }

}

При выполнении этой программы получается следующий результат.

Сведения об объекте t1:

Треугольник равнобедренный

Ширина и высота равны 4 и 4

Площадь равна 8

Сведения об объекте t2:

Треугольник прямоугольный

Ширина и высота равны 8 и 12

Площадь равна 48

В классе Triangle создается особый тип объекта класса TwoDShape (в данном случае — треугольник). Кроме того, в класс Triangle входят все члены класса TwoDShape, к которым, в частности, добавляются методы Area() и ShowStyle(). Так, описание типа треугольника сохраняется в переменной Style, метод Area() рассчитывает и возвращает площадь треугольника, а метод ShowStyle() отображает тип треугольника.

Обратите внимание на синтаксис, используемый в классе Triangle для наследования класса TwoDShape.

class Triangle : TwoDShape {

Перейти на страницу:

Похожие книги