Страница 148 из 502
<b> Width + " и " + Height);</b>
<b> }</b>
<b>}</b>
<b>// Класс Triangle, производный от класса TwoDShape. </b>
<b>class Triangle : TwoDShape {</b>
<b> public string Style; // тип треугольника</b>
<b> // Возвратить площадь треугольника, </b>
<b> public double Area() {</b>
<b> return Width * Height / 2;</b>
<b> }</b>
<b> // Показать тип треугольника, </b>
<b> public void ShowStyle() {</b>
<b> Console.WriteLine("Треугольник " + Style);</b>
<b> }</b>
<b>}</b>
<b>class Shapes {</b>
<b> static void Main() {</b>
<b> Triangle t1 = new Triangle(); </b>
<b> Triangle t2 = new Triangle();</b>
<b> t1.Width = 4.0;</b>
<b> t1.Height = 4.0;</b>
<b> t1.Style = "равнобедренный";</b>
<b> t2.Width = 8.0;</b>
<b> t2.Height = 12.0;</b>
<b> t2.Style = "прямоугольный";</b>
<div class="fb2-code"><code><b> Console.WriteLine(&quot;Сведения об объекте t1: &quot;);</b></code></div>
<div class="fb2-code"><code><b> t1.ShowStyle(); </b></code></div>
<b> t1.ShowDim();</b>
<b> Console.WriteLine ("Площадь равна " + t1.Area());</b>
<b> Console.WriteLine();</b>
<b> Console.WriteLine("Сведения об объекте t2: "); </b>
<b> t2.ShowStyle(); </b>
<b> t2.ShowDim();</b>
<b> Console.WriteLine("Площадь равна " + t2.Area());</b>
<b> }</b>
<b>}</b>
При выполнении этой программы получается следующий результат.
<b>Сведения об объекте t1:</b>
<b>Треугольник равнобедренный </b>
<b>Ширина и высота равны 4 и 4 </b>
<b>Площадь равна 8</b>
<b>Сведения об объекте t2:</b>
<b>Треугольник прямоугольный </b>
<b>Ширина и высота равны 8 и 12 </b>
<b>Площадь равна 48</b>
В классе Triangle создается особый тип объекта класса TwoDShape (в данном случае — треугольник). Кроме того, в класс Triangle входят все члены класса TwoDShape, к которым, в частности, добавляются методы Area() и ShowStyle(). Так, описание типа треугольника сохраняется в переменной Style, метод Area() рассчитывает и возвращает площадь треугольника, а метод ShowStyle() отображает тип треугольника.
Обратите внимание на синтаксис, используемый в классе Triangle для наследования класса TwoDShape.
<b>class Triangle : TwoDShape {</b>
Этот синтаксис может быть обобщен. Всякий раз, когда один класс наследует от другого, после имени базового класса указывается имя производного класса, отделяемое двоеточием. В C# синтаксис наследования класса удивительно прост и удобен в использовании.
В класс Triangle входят все члены его базового класса TwoDShape, и поэтому в нем переменные Width и Height доступны для метода Area(). Кроме того, объекты t1 и t2 в методе Main() могут обращаться непосредственно к переменным Width и Height, как будто они являются членами класса Triangle. На рис. 11.1 схематически показано, каким образом класс TwoDShape вводится в класс Triangle.
Рис. 11.1. Схематическое представление класса Triangle
Несмотря на то что класс TwoDShape является базовым для класса Triangle, в то же время он представляет собой совершенно независимый и самодостаточный класс. Если класс служит базовым для производного класса, то это совсем не означает, что он не может быть использован самостоятельно. Например, следующий фрагмент кода считается вполне допустимым.
<b>TwoDShape shape = new TwoDShape();</b>
<b> shape.Width = 10; </b>
<b>shape.Height = 20;</b>
<b>shape.ShowDim();</b>