Наследование и сокрытие имен

В производном классе можно определить член с таким же именем, как и у члена его базового класса. В этом случае член базового класса скрывается в производном классе. И хотя формально в C# это не считается ошибкой, компилятор все же выдаст сообщение, предупреждающее о том, что имя скрывается. Если член базового класса требуется скрыть намеренно, то перед его именем следует указать ключевое слово new, чтобы избежать появления подобного предупреждающего сообщения. Следует, однако, иметь в виду, что это совершенно отдельное применение ключевого слова new, не похожее на его применение при создании экземпляра объекта.

//пример сокрытия имени с наследственной связью

using System;

class A

{

public int i = 0;

}

//создать производный класс.

class B: A

{

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

public B(int b)

{

i = b; // член i в классе В

}

public void Show()

{

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

}

}

class NameHiding

{

static void Main()

{

B ob = new B(2);

ob.Show();

}

}

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: