Затенение в C # - PullRequest
       22

Затенение в C #

0 голосов
/ 23 октября 2011

Я использую C #.У меня есть два класса A и B. B наследуется от A. У них обоих есть метод Foo () (который является виртуальным в A).Теперь, если у меня есть

A b = new B();
int x = b.Foo();

, то вызывается Foo () из A.Но если Foo () в B имеет ключевое слово «new», то снова вызывается Foo () из базового класса.Тогда зачем мне использовать теневое копирование?

Ответы [ 4 ]

3 голосов
/ 23 октября 2011

Единственный случай, когда я использовал скрытие метода, - это когда я хочу вернуть производный тип в производный класс (фактический объект, возвращаемый из обоих методов, должен быть здесь идентичным).Конечно, это всего лишь взлом из-за отсутствия в C # ковариации типа результата.

1 голос
/ 23 октября 2011

Использование new означает именно это: не переопределять.

Эффект only new состоит в подавлении предупреждения компилятора о скрытии базового элемента.Это никогда не приведет к вызову другого метода.

0 голосов
/ 23 октября 2011

Это довольно полезно с полиморфизмом.

Этот пост может быть хорошим началом.
Хасан Хан также опубликовал хороший, который я собирался упомянуть (больше не нужно).
Этот другой пост тоже может помочь.

...