Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
10
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать

1) Позволяет вызвать конструктор базового класса:

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

конструктор_производного_класса (список_параметров) : base (список_аргументов)

{ тело конструктора }

где с помощью элемента списка аргументов передаются параметры конструктору базового класса. Например:

using System;

class DemoPoint

{

protected int x;

protected int y;

public void Show()

{

Console.WriteLine("({0}, {1})", x, y);

}

public DemoPoint(int x, int y)//конструктор базового класса

{

this.x = x; this.y = y;

}

}

class DemoLine : DemoPoint

{

public int xEnd;

public int yEnd;

new public void Show()

{

Console.WriteLine("({0}, {1})-({2}, {3})", x, y, xEnd, yEnd);

}

public DemoLine(int x1, int y1, int x2, int y2) : base(x1, y1) //конструктор производного класса

{

xEnd = x2; yEnd = y2;

}

}

class Program

{

static void Main()

{

DemoPoint point = new DemoPoint(5, 5);

point.Show();

DemoLine line = new DemoLine(2, 2, 10, 10);

line.Show();

}

}

Задание. Объясните, почему в конструкторе базового класса для инициализации полей используется параметр this, а в конструкторе производного класса нет.

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

using System;

class DemoPoint

{

protected int x;

protected int y;

public void Show()

{

Console.WriteLine("({0}, {1})", x, y);

}

public DemoPoint() //конструктор базового класса по умолчанию

{

this.x = 1; this.y = 1;

}

public DemoPoint(int x, int y) //конструктор базового класса с параметрами

{

this.x = x; this.y = y;

}

}

class DemoLine : DemoPoint

{

public int xEnd;

public int yEnd;

new public void Show()

{

Console.WriteLine("({0}, {1})-({2}, {3})", x, y, xEnd, yEnd);

}

public DemoLine() //конструктор производного класса по умолчанию

{

xEnd = 100; yEnd = 100;

}

public DemoLine(int x2, int y2) //конструктор производного класса с двумя параметрами

{

xEnd = x2; yEnd = y2;

}

//конструктор производного класса с четырьмя параметрами

public DemoLine(int x1, int y1, int x2, int y2) : base(x1, y1)

{

xEnd = x2; yEnd = y2;

}

}

class Program

{

static void Main()

{

DemoPoint point1 = new DemoPoint(); //вызов конструктора по умолчанию

DemoPoint point2 = new DemoPoint(5, 5); //вызов конструктора с параметрами

point1.Show();

point2.Show();

DemoLine line1 = new DemoLine();//вызов конструктора по умолчанию

DemoLine line2 = new DemoLine(4, 4); //вызов конструктора с двумя параметрами

//вызов конструктора с четырьмя параметрами

DemoLine line3 = new DemoLine(2, 2, 10, 10);

line1.Show();

line2.Show();

line3.Show();

}

}

Задание. Объясните, как при вызове конструкторе производного класса инициируется вызов конструктора базового класса.