Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Вызов базового конструктора






Если же конструкторы определены и в базовом, и в производном классе, то процесс создания объектов несколько усложняется, т.к. должны выполниться конструкторы обоих классов. В этом случае используется ключевое слово base, которое имеет два назначения:

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

}

}

В общем случае с помощью ключевого слова 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();

}

}


2) позволяет получить доступ к члену базового класса, который скрыт " за" членом производного класса

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.