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