![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Вызов базового конструктора
Если же конструкторы определены и в базовом, и в производном классе, то процесс создания объектов несколько усложняется, т.к. должны выполниться конструкторы обоих классов. В этом случае используется ключевое слово 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 всегда указывает на базовый класс для производного класса, в котором она используется. В этом случае формат ее записи выглядит следующим образом:
|