14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

скры т ь и обнаружит ь<br />

Произбодный класс ум<strong>е</strong><strong>е</strong>т скрыбать м<strong>е</strong>тоды<br />

Запустит<strong>е</strong> пpoгpaммyJewelThief. Так как это консольно<strong>е</strong> прилож<strong>е</strong>ни<strong>е</strong>, вывод р<strong>е</strong>зультатов осущ<strong>е</strong>ствля<strong>е</strong>тся<br />

ч<strong>е</strong>р<strong>е</strong>з командно<strong>е</strong> окно. Вот как это выглядит:<br />

file;///C:/Usera/aftctraw/Dgcuwents/V№ttai Studio aaiO/Pfojerts/Chapttr 6 соё<strong>е</strong>/lawei<br />

rhank you for 3*etmining jew els! S p a rk le , sp a rk le !<br />

Вы ожидали, что программа напиш<strong>е</strong>т ко<strong>е</strong>-что друго<strong>е</strong>? Наприм<strong>е</strong>р:<br />

I'm s t e a l i n g t h e c o n t e n t s ! S p a r k le , s p a r k le ! (Я краду д р агоц <strong>е</strong>н н ости ! К руто!)<br />

Но каж<strong>е</strong>тся, наш вор JewelThief повторя<strong>е</strong>т д<strong>е</strong>йствия сл<strong>е</strong>саря Locksmith! Как это могло произойти?<br />

Сравн<strong>е</strong>ни<strong>е</strong> скрытия ип<strong>е</strong>р<strong>е</strong>крытия м<strong>е</strong>тодов<br />

Причиной, по которой объ<strong>е</strong>кт J e w e l T h i e f при вызов<strong>е</strong> м<strong>е</strong>тода R e t u r n C o n t e n t s {) в<strong>е</strong>д<strong>е</strong>т с<strong>е</strong>бя как объ<strong>е</strong>кт<br />

L o c k s m it h , явля<strong>е</strong>тся способ, которым класс J e w e l T h i e f объявил этот м<strong>е</strong>тод. Подсказка находится<br />

в пр<strong>е</strong>дупр<strong>е</strong>жд<strong>е</strong>ниях, которы<strong>е</strong> посыла<strong>е</strong>т прилож<strong>е</strong>ни<strong>е</strong>:<br />

О О Errors ji ^ 1 Warning О Messages [<br />

Description<br />

A 1<br />

'iewel_Thief J«ive(Thtef.ReturnContentsCJewel_Thief.Jewets, Jewel_Thief.Owner)‘ hides inherited member<br />

'ieweLThief.Locksmith.ReturnContents(jewel_Thief,Jewels, Jewel_Thief.Owner)'. To make the current member<br />

override that implementation, add the override keyword. Othenwise add the new keyword.<br />

Так как класс J e w e l T h i e f насл<strong>е</strong>ду<strong>е</strong>т от класса L o c k s m i t h<br />

и по ид<strong>е</strong><strong>е</strong> зам<strong>е</strong>ща<strong>е</strong>т м<strong>е</strong>тод R e t u r n C o n t e n t s () своим собств<strong>е</strong>нным,<br />

каж<strong>е</strong>тся, что этот м<strong>е</strong>тод п<strong>е</strong>р<strong>е</strong>крыва<strong>е</strong>тся. Но на<br />

самом д<strong>е</strong>л<strong>е</strong> это н<strong>е</strong> так. Объ<strong>е</strong>кт J e w e l T h i e f скрыва<strong>е</strong>т м<strong>е</strong>тод<br />

R e t u r n C o n t e n t s ().<br />

При скрытии производный класс зам<strong>е</strong>ща<strong>е</strong>т (т<strong>е</strong>хнич<strong>е</strong>ски<br />

он «п<strong>е</strong>р<strong>е</strong>объявля<strong>е</strong>т») одноим<strong>е</strong>нный м<strong>е</strong>тод базового класса.<br />

В итог<strong>е</strong> в производном класс<strong>е</strong> оказываются два м<strong>е</strong>тода<br />

с одинаковым им<strong>е</strong>н<strong>е</strong>м: один унасл<strong>е</strong>дованный и один опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>нный<br />

самостоят<strong>е</strong>льно.<br />

Если имя и сигнатура создава<strong>е</strong>мого<br />

м<strong>е</strong>тода совпада<strong>е</strong>т<br />

с им<strong>е</strong>н<strong>е</strong>м и сигнатурой<br />

насл<strong>е</strong>ду<strong>е</strong>мых м<strong>е</strong>тодов, новый<br />

м<strong>е</strong>тод производного<br />

класса скрыва<strong>е</strong>т м<strong>е</strong>тод<br />

базового класса.<br />

262 глава 6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!