Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_C#.doc
Скачиваний:
38
Добавлен:
15.11.2018
Размер:
2.72 Mб
Скачать
  1. Позволяет вызвать конструктор базового класса:

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

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

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

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

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 можно вызвать конструктор любой формы, определенный в базовом классе. Реально же выполнится тот конструктор, параметры которого будут соответствовать переданным при вызове аргументам. Например:

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();

}

}

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