Добавил:
2200 7008 9480 6099 TKFF БЛАГОДАРНОСТЬ МОЖНО ТУТ ОСТАВИТЬ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ 2025 / 4 курса_МТУСИ / 1 КУРС / Информатика / С# для чайников - Мюллер.pdf
Скачиваний:
0
Добавлен:
04.06.2025
Размер:
53.3 Mб
Скачать

и Ведн еиаоавее аоевиe. пии заноеи аАоиидн оивхи еиаоавепвеи аиоАесакоееоиатиеи12но,

Что скрыто за интерфейсом

 

­#.#)(-.

 

) ,'1$6" -

'1#))(,1#('1$)#.

,!,

,!(!'1,.

 

#o'1#1t1$)#'1

)#(,1$К '1!

o,!em

 

(!'1,.

 

,(!

 

(!

,'1-6!.

В,

$"'1(o$)1t1!...-"(

 

Жд ) Г))!$0

1t1'1!

'1#(,1(,1#0В,!'1".'1!

 

),

(,1!."("

 

.,(.

 

))!$(,1

)!.)()"'1'1,(,1

 

,.$"'1(!(,1o_

 

е!1t1-)($(,1

 

),

$(,1""("

)(!..

 

).!.'1,.

 

 

$.$

0$('1!-(,1'1,.

 

,.#))

 

.(!

'1" 0!($("

1t1!.'1!)(..

 

1t1'1",!)(#).-(.

 

 

Жд

Г

!(,'1,(,.

 

 

$'1("'1S".)

,.$"'1(#(,1

 

'1#1t1'1$(,1"'1 !'1

),...#"(

 

'1",!(!'1,"

 

 

!1t1#)'1,"

 

!1t1"'1#а$$Я

,!

!'1,"

'1"

,!..'1,

 

.,(.

,!)(-1t1'1,

))"(,1

1t1!,'1-

,

Л $,"#."

),

 

0!($("

 

1t1'1",!)(#).-(.

 

 

))"(,1 '1".!..E!"

 

 

.".!1t1#)'1!"

1t1!,(,1'1!.")()!

 

!(,'1,(,0

 

 

(,1"(!,!)ы

 

),'1,)#-

 

1t1'1$

T(!(,1

,'1-6$"

.!.""

 

!1t1#)'1,"

'1("'1S".),

_w

1t1!.)!.-.(

 

 

'1"E$(.

 

$ T(-

.#,

#.-_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Л!(

"O"

!,$'1

,.#))

r$.

$

'10_" 2'1",!(!'1,"

 

(,1"(!,,

$

))!.)()#

 

,!(!'1!6!

(,1!em

 

6- (

.".!1t1#)'1!

 

$)1t1!...!)#(.)-

 

 

,#."

'1!)$.,#(,1$

!( 1t1'1!6'1#(,1(,1$'1!)#'1$-n

 

е! -

 

,.#))#

")(.

$ '1"),!..,!

.!.""

 

1t1'1!,)$'1-(,0

 

)!.(,1!.'1!

)(".

,!(!'1,"

 

 

(,1!6-(

 

!,#.#(.)-

 

!1t1#)'1,(,1$

)

'1"-(,1".,0

 

'1-,#0

 

 

 

 

 

 

 

 

 

 

 

 

Мх.d. w Интерфейсы 421

Сначала разрабатываем интерфейс С#, который предоставляет безопасные методы:

О,

О,

lтzТеперь модифицируем класс Robo z i l l a как реализующий интерфейс. По­ скольку он уже содержит реализацию требуемых методов, все, что нам надо, - добавить : IRobozillaSafe в заголовок класса:

-о,окито леeоаопокeнаиеbнттRobozilla т тоекоаоеаттовД,.опетантат инттоеlтооеlебкопаеоbиееаирокыостIRobozillaSafe. #нсаоттеалеbаоп\ рнлткоптатеbраитаниlакетниариетеВеl.оеанRobozilla, иетебткнтнсао одеенеттоbеыинаирокыостEтеренеюрепоbноатр,ка ,елета танралотееде лоаепн ынlкапеабlнтbппеодет еbнттRobozilla):

 

 

ь

 

 

 

О

,

О

,

О

,

cетbо реВеbаопаоледыат,еbибетнриRobozilla ,кало.иеане

О ,

О,

н,

.ре рне,кетаеocеткоптртелаиаокыостнеиаледыртоботнаиаолоаепо Robozilla, еерекооыенбниот аирокыостоиоS lеbооаеВез е ет,окалеeор кнбкыzааитнzыапаbbай,кетаол,катопоиаолаа,н

О,

ЧАСТЬ 2 тaфдгтеожо авдетваотрееоди жаощар яяв аотревди ерииси

 

САЕТОПB'txИЗ СВtxВНИВЗООС1ЕМСВЕТАНОЕТОСОЕТ1 МО1МССЕТСААЕПОИНС

 

ООППВОcИ3oПОАООПЕОБЕТОB ПО1МОПНВЕТООЗBBaОВНОИ1ЗВНИЕТЕООППВОКИ

 

cИ3

МНВАО1ВСМtxВaВВО ОПСААСЕТОЗНИЕТВ'ЕТОПОПB'ВННСНААЕПОС

СОВЕТ

ЗО!ВЕТBОС1ЕМСЕТЕНС ИАrОВНB3 ООППВОcИ3МОПСААВiЗВННОi

ПОБЕТО

 

 

ЗB

c, •НСПСИЗВСS ПСВВОАЕТСМПНВЕТo ЗВЕТОВe, КИBs

iscj MООЕТОСЕИ

 

МО1МССoСВЕТООППВОcИ3SООЕТОСB3НВПЕ1НИ1ЗВННЕТЕ

 

 

1 a

·

ОЕТНИНЕТВСtВИА1ВВАЕНВИАПОПЕ1BВЕТАННСM1НС'ВНИВВСННОaОСВtxВНИНЕТО!В

АСЗОВЕТ

ГЛАВА 1 8 Интерфейсы 423

Наследова.ние интерфейс;ов

Интерфейс С# может "наследовать" методы другого интерфейса. Кавычки

япоставил потому, что это не истинное наследование - не важно, на что оно

при этом похоже. В приведенном далее коде в заголовке указывается эvт eх,ы

#дьдгnд,лвы очень похожий на базовый класс:

?им -,х щ(,a1р' р :ruщ6щ-, р a, , цц

цц

к . к

С помощью "наследования" интерфейсом IRobozillaSafe интерфейса IPet вы можете заставить данное подмножество Robozilla реализовать собствен­ ную "одомашненность" без навязывания неподходящих свойств:

))rщ

,,

1р'р г 1р' р

Rrащ,

 

a, ,

 

 

 

a1р' р

:umrщ6щ-,цц П

 

 

цц

 

1р'

р :rzщ

. . .

 

 

цц

 

a1р'р :xащ6щ,-D

 

 

ц ц

a, ,

a , ,

т

 

 

 

цц

Н

 

 

 

ц ц

г

,, 1р'р . П ,,a

имт, ,,

йз

г

,, 1р'р

a , ,

1р'р . НV

 

 

д о )к й "

 

 

a , , к

 

 

Интерфейс IRobozillaSafe наследует интерфейс I Pet. Таким образом, что­ бы реализация IRobozillaSafe была полной, классы, реализующие этот ин­ терфейс, должны реализовывать и интерфейс I Pet. Такое наследование - со­ всем не то же, что и наследование классов. Например, показанный выше класс PetRobo может иметь конструктор, но аналога конструктора базового класса для IRobozillaSafe или I Pet не существует. Интерфейсы не имеют конструк­ торов. Что еще более важно, полиморфизм с интерфейсами не работает. В то время как вы можете вызвать метод подкласса посредством ссылки на базовый класс (полиморфизм классов), подобная операция с интерфейсами не работа­ ет: вы не можете вызвать метод производного интерфейса (IRobozillaSafe) посредством ссылки на базовый интерфейс (IPet).

Хотя наследование интерфейсов не полиморфно в том смысле, в котором полиморфно наследование классов, вы можете передать объект интерфейса производного типа (IRobozillaSafe) в качестве параметра с типом базового интерфейса (I Pet). Это также означает возможность размещения объектов

IRobozillaSafe в коллекции объектов IPet.

i л i, ЧАСТЬ 2

B Ь(.1B( Ь1.(Г0

(B .( .0ВВ 1.(Г0 1B

0

Использование интерфейсов для внесения изменений в объектно­ ориентированные программы

s1;1,.п,uQg c.,aQ1;1бС_

nД1;1Q,r,u

З_Д

З ,r ,

s, ,.­,s1;1­.,Сбss,рr

д.,

.брр

.,Сбs­Дт З,1;1,.gu

,r,Qc,

­Сб,1;1

 

­rЗ,Q1;1

c.­

р,s,s­nфС c.,

.б рр,

Qc,_

,Сбs­, ­s1;1,.п,uQ,С

c,

С,_ n,1;1 Сбрc.,Q1;1,

.бQQр,n1;1 QnС _­и,

s,Сgр

1;1.,r,Сбs­nр

З c., .бр р,

 

 

 

 

 

 

 

 

 

ЕВ ЕТОЧЕТВАBАПЕO<! iЧЕТO<!

Ч

ЕВЕЧЕТВeОЕАЕТЧЕЕТBox>О1ВЧ ПВСВВЧВЕТВ

 

ЕОДB3 ПСО1СЧЕЕB ПОПO<!

ОДЧЕТВПНЕСОЕЧДАeОСВЕЧ/ЧЕЧ3ЕТЕТСВЕТОДЧЕТO<

ЗАПОМНИ!

ДЕВАВЕЧНЕТВХЧПЧ ЧЕ

ХЧ

ЕВЕВЕЧИЕТ ,О!ЧПBИАЕТЧВОЕТЧДB

O<!ЕОДЕТВB3

ДО ЕО!ЕОАЕТO<!oiЧПО

ИАЕТЧЧАПСЧДO<!TЕТВОtxЧЕТeBox /ПСО1СЧЕ

 

 

ЕВ eОЕeBСВЕЕТЧ B

BDccv'BcЧЕВВЕТДО

ЕО!ЕОАЕТO<!СЕТЧeПО/ВЕB ВВЕВ

 

ЧЕВВЕТ B B D Чr ДЧtxВИПСО1СЧЕЕЕxo jЕО1ЧВ

ПСО1СЧЕЕЕ ВОП1ОДВPЗ

ЕЕЕТЕАНPЧПСО1СЧЕЕ ДОАОЕТВЕЕОАЕТЧЕЧПЧАЧЕЕЕХЕЧ cB cDЧПЧ

BBАПB!СЧЕТПО, -ПВЕТСn- Ч ЕТОЧ ЕТОПO<!i,ВЕТСЧ TЕТОЕОЕЧCОВДВС1ЧЗ

ПЧАO<!ЕЕО!ВАЕТДЧB ЕВЕВЕЧТЕХTЕТЧ1ОВЕl cЕТОCС ВЧВЕТППЧЕЧСОДЧЕЧ3

Ч ПСОВeЕТЧСОДЧЕЧА3B/ВЕТОЕТBВBoЧХЧ ЕВЕВЕЧТЕХЕЧЧДЕАtxЧИПСЧО): СЧЕТВЕТl

/ОЕТЕВЕТОПO<!iОИПСЧЕВСl,СВВПОПО!ЧЕ PЕТОДЧВСЧСХЧЧeПЧААОД0ЕaЕ! О ВeЗ ЕТЕПОВeПЧААОДЕОkBЕТПВСВЕВoЧЕТO<!ЕТВЕАНЧПЧЧЕЕЕ АПОАОЕТОЕ0 a ЕМВ! eСЧВВЕТАНi

0ЕaЕ

НCCЕТОВ CЧВЕТ0 aiЕ МСВЧОПОP ВЕТ!ВЧЕi Ч АПОАОЕТОДСВЧПЧ

ЧcЧЧСЧ ПЧ/ЕЕХ

СВ!ЧЕОД ПВСВЕВoВЕЧН ЧПe3/ЧВЕТАНДЧАПОПO<!

ОДЧЕЧЧЕЧАПВВОДЧЕЧНЧЕВВЕТАН

ЕТЧ

ОДЕИeПЧАА0ЕaЕ! Ч ЧЕТАЕТСЧeЕТЕЕИЕВЕТОВ2ЕВОТ ЕlЧЕТВЕ9 eЧ!В

ИПОВeПЧААПВ):

СВeСЕДЧВЕВЕТОВЕТЕВО ТПОЕ ТuТСЧЕ Х ЕОЕВ1BО СВЧП

 

АТ

c T c T

АТ

1

Б a

1

t

a

АТ

1 a

t

ГЛАВА 1 8 Интерфейсы оячt

Соседние файлы в папке Информатика