Добавить в цитаты Настройки чтения

Страница 152 из 502

<b>// Добавить конструктор в класс Triangle, </b>

<b>using System;</b>

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

<b>class TwoDShape { </b>

<b>  double pri_width; </b>

<b>  double pri_height;</b>

<b>  // Свойства ширины и длины объекта, </b>

<b>  public double Width {</b>

<b>    get { return pri_width; }</b>

<b>    set { pri_width = value &lt; 0 ? -value : value; }</b>

<b>  }</b>

<b>  public double Height {</b>

<b>    get { return pri_height; }</b>

<b>    set { pri_height = value &lt; 0 ? -value : value; }</b>

<b>  }</b>

<b>  public void ShowDim() {</b>

<b>    Console.WriteLine(&quot;Ширина и длина равны &quot; +</b>

<b>           Width + &quot; и &quot; + Height);</b>

<b>  }</b>

<b>}</b>

<b>// Класс для треугольников, производный от класса TwoDShape. </b>

<b>class Triangle : TwoDShape { </b>

<b>  string Style;</b>

<b>  // Конструктор.</b>

<b>  public Triangle(string s, double w, double h) {</b>

<b>    Width = w; // инициализировать член базового класса </b>

<b>    Height = h; // инициализировать член базового класса </b>

<b>    Style = s; // инициализировать член производного класса</b>

<b>  }</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(&quot;Треугольник &quot; + Style);</b>

<b>  }</b>

<b>}</b>

<b>class Shapes3 {</b>

<b>  static void Main() {</b>

<b>    Triangle t1 = new Triangle(&quot;равнобедренный&quot;, 4.0, 4.0); </b>

<b>    Triangle t2 = new Triangle(&quot;прямоугольный&quot;, 8.0, 12.0);</b>

<b>    Console.WriteLine(&quot;Сведения об объекте t1: &quot;); </b>

<b>    t1.ShowStyle(); </b>

<b>    t1.ShowDim();</b>

<b>    Console.WriteLine(&quot;Площадь равна &quot; + t1.Area());</b>

<b>    Console.WriteLine();</b>

<b>    Console.WriteLine(&quot;Сведения об объекте t2: &quot;); </b>

<b>    t2.ShowStyle(); </b>

<b>    t2.ShowDim() ;</b>

<b>    Console.WriteLine(&quot;Площадь равна &quot; + t2.Area());</b>

<b>  }</b>

<b>}</b>

В данном примере конструктор класса Triangle инициализирует наследуемые члены класса TwoDShape вместе с его собственным полем Style.

Когда конструкторы определяются как в базовом, так и в производном классе, процесс построения объекта несколько усложняется, поскольку должны выполняться конструкторы обоих классов. В данном случае приходится обращаться к еще одному ключевому слову языка С#: base, которое находит двоякое применение: во-первых, для вызова конструктора базового класса; и во-вторых, для доступа к члену базового класса, скрывающегося за членом производного класса. Ниже будет рассмотрено первое применение ключевого слова base.

С помощью формы расширенного объявления конструктора производного класса и ключевого слова base в производном классе может быть вызван конструктор, определенный в его базовом классе. Ниже приведена общая форма этого расширенного объявления:

<b><i>конструктор_производного_класса{список_параметров)</i> : base <i>(список_аргументов)</i> { </b>

<b>  // тело конструктора</b>

<b>}</b>

где список_аргументов обозначает любые аргументы, необходимые конструктору в базовом классе. Обратите внимание на местоположение двоеточия.

Для того чтобы продемонстрировать применение ключевого слова base на конкретном примере, рассмотрим еще один вариант класса TwoDShape в приведенной ниже программе. В данном примере определяется конструктор, инициализирующий свойства Width и Height. Затем этот конструктор вызывается конструктором класса Triangle.