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

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

}

}

В представленном выше примере объектt2конструируется из объектаtinпоэтому подобен ему. Ниже приведен результат'выполнения кода из данного примера.

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

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

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

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

Обратите особое внимание на следующий конструктор классаTriangle:

public Triangle(Triangle ob) : base(ob) {

Style = ob.Style;

}

Он принимает объект типаTriangleв качестве своего параметра и передает его (с помощью ключевого словаbase)следующему конструктору классаTwoDShape.

public TwoDShape(TwoDShape ob) {

Width = ob.Width;

Height = ob.Height;

}

Самое любопытное, что конструкторTwoDShape() предполагает получить объект классаTwoDShape,тогда как конструкторTriangle() передает ему объект классаTriangle.Как пояснялось выше, такое вполне допустимо, поскольку по ссылке на объект базового класса можно обращаться к объекту производного класса. Следовательно, конструкторуTwoDShape() можно на совершенно законных основаниях передать ссылку на объект класса, производного от классаTwoDShape.А поскольку конструкторTwoDShape() инициализирует только те части объекта производного класса, которые являются членами классаTwoDShape,то для него не имеет никакого значения, содержит ли этот объект другие члены, добавленные в производном классе.

Виртуальные методы и их переопределение

Виртуальнымназывается такой метод, который объявляется какvirtualв базовом классе. Виртуальный метод отличается тем, что он может быть переопределен в одном или нескольких производных классах. Следовательно, у каждого производного класса

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

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