Выбрать главу

if(index >= lowerBound & index <= upperBound) return true; return false;

}

Этот метод аналогичен использовавшемуся в классе FailSof tArray, за исключением того, что в нем контроль границ массива осуществляется по значениям переменных lowerBound и upperBound.

Класс RangeArray демонстрирует лишь одну разновидность специализированного массива, который может быть создан с помощью индексаторов и свойств. Существуют, конечно, и другие. Аналогичным образом можно, например, создать динамические массивы, которые расширяются или сужаются по мере надобности, ассоциативные и разреженные массивы. Попробуйте создать один из таких массивов в качестве упражнения.

ГЛАВА 11 Наследование

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

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

Основы наследования

Поддержка наследования в 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 ShowDimO {

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

Width + " и " + Height);

}

}

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

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

// Возвратить площадь треугольника, public double Area() {

return Width * Height / 2;

}

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

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

}

}

class Shapes {

static void Main() {

Triangle tl = new Triangle(); Triangle t2 = new Triangle();

tl.Width = 4.0;

tl.Height = 4.0;

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

t2.Width = 8.0;

t2.Height = 12.0;

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

tl.ShowStyle (); tl.ShowDim();

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

Console.WriteLine();

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

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

}

}

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

Сведения об объекте tclass="underline"

Треугольник равнобедренный Ширина и высота равны 4 и 4 Площадь равна 8

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

Треугольник прямоугольный Ширина и высота равны 8 и 12 Площадь равна 48

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