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