class NameHiding { static void Main() {

В ob = new В(2);

ob.Show() ;

}

}

Прежде всего обратите внимание на использование ключевого словаnewв следующей строке кода.

new int i; // этот член скрывает член i из класса А

В этой строке компилятору, по существу, сообщается о том, что вновь создаваемая переменнаяiнамеренно скрывает переменнуюiиз базового классаАи что автору программы об этом известно. Если же опустить ключевое словоnewв этой строке кода, то компилятор выдаст предупреждающее сообщение.

Вот к какому результату приводит выполнение приведенного выше кода.

Член i в производном классе: 2

В классеВопределяется собственная переменная экземпляраi,которая скрывает переменнуюiиз базового классаА.Поэтому при вызове методаShow() для объекта типаВвыводится значение переменнойi,определенной в классеВ,а не той, что определена в классеА.

Применение ключевого слова base для доступа к скрытому имени

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

base.член

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

// Применение ключевого слова base для преодоления // препятствия, связанного с сокрытием имен.

using System;

class А {

public int i = 0;

}

// Ссзздать производный класс, class В : А {

new int i; // этот член скрывает член i из класса А

public В(int a, int b) {

base.i = а; // здесь обнаруживается скрытый    член    из    класса А

i = Ь; // член i из класса В

}

«

public void Show()    {

// Здесь выводится член i из класса А.

Console.WriteLine("Член i в базовом классе:    "    +    base.i);

// А здесь выводится член i из класса В.

Console.WriteLine("Член i в производном классе: " + i);

}

}

class UncoverName { static void Main() {

В ob = new В(1, 2) ; ob.Show ();

}

}

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

Член i в базовом классе: 1 Член i в производном классе: 2

Несмотря на то что переменная экземпляраiв производном классеВскрывает переменнуюiиз базового классаА,ключевое словоbaseразрешает доступ к переменнойi,определенной в базовом классе.

Перейти на страницу:

Похожие книги