В классеВопределяется собственная переменная экземпляра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,определенной в базовом классе.
С помощью ключевого словаbaseмогут также вызываться скрытые методы. Например, в приведенном ниже коде классВнаследует класс Айв обоих классах объявляется методShow. А затем в методеShow классаВс помощью ключевого словаbaseвызывается вариант методаShow , определенный в классеА.
// Вызвать скрытый метод.
using System;
class А {
public int i = 0;
Console.WriteLine("Член i в базовом классе: " + i);
}
}
// Создать производный класс, class В : А {
new int i; // этот член скрывает член i из класса А
public В(int a, int b) {
base.i = а; // здесь обнаруживается скрытый член из класса А
i = Ь; // член i из класса В
}