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

ЗАПОМНИ!

СОВЕТ

dЕВPСИСИОМС!!НОPНСВВИОPО ОBВМЕВhИЕТЕТВl ):СО ИВ ЕНОМСО):МСВСЕТh hВМПЕТЗ!СП СОНB9ИС М!ОМОBМСaНВС!ОИЕТВСИЕТПООС! e!ОaЕТЕСВС ВPО ИСОВtИОМС!BОBЕТВPhСВСЕОООВНtПНЕТМИЕТtСВСПОЕТhВМСaaООnВОtИЕТБ ОЕЕТBОПB

:! ВaЕТСЕЕТМСЕТa ОBЕТСМСЕТОB,ВПСИО ОНЕТВИСЕТНОaСИИ ОP ЕНОPНСВЕТНОh aСИЕТЕТОЕТЕТЕНОМСОСЕТОЕТnСЗИСНВПОВВИО!С ОСОСaСС!ЕНВО!ОhСВИЕТ ОСИОЕВИЕТ! :9м i oP c 9ОИСПОeПОPОС):СО ЕТВВС МВЕТМЕТИСООB BВn ПОЕТВСИЕТЗB !НЕТВВИЕТС ИСМЕТВООa ИЕТВB

B r ММЧД! e1Rn1 КИeЧМrИ 1 n 3CRМИRЕТВR

nЕТП:e НВСЕТНВСn НЕТОaОnВОtИОМСВЗЕТНСnНСBОССИИЕТБОЕЕТ!ОООВНtПЕТИСct МЕТВ ОИЕТЕТaС c

Заменяемость классов

Н) !ankA)(. . .!F#,

,-0!3

6C! 7(,6

!1r#.,

n!...(--(

,(.

# 72 C!7 !-1 u#-,

7.1

#,-1

..1

!1r# .,(

1(C!7!ankA!..(--(c tr у1F#2 .!ankA.,7,.#,6

r,1 .! (х #nх,W 7

!.(!.

 

,C 0),.#)

!7c

i

<

<ЧВ

.i!ьF#,

0#) #.(7(,6

!1r#.,

У юэunрttiкunЧ

7 .# ,!.

 

ю

<t<Чдi

ю

.!,

С!)2i

!F,.(#,

!1r#.,

Уunрt tiкunЧtrcу.2! F#,#

-.#.(

,6

r,!

0)#!1)(C!7((,#

1!3##

17(2.

 

 

 

Ч ц

Зф

 

u

 

 

 

ф

 

 

 

 

 

 

 

 

 

 

 

 

trn#)7!iу

-,)!.

 

# !1r#.,

 

У

эюunрtt iкunЧ-!g)((1#

,-1

7 n#) #.#((!i

,, n(

УunрtiкunЧыО

7

n!.(1

#,

(#! 1g! .,.!#

0)#!1)(

C!7 ((, # 7.#-,!

7(-Т trу7,!

)!i

-,)!. # 17(2.

 

!1)(C!.

,-n!36

C!7((

!0#)( ,!)

n),7

#. #(,1

,,

0(Т

 

Н ! -.# .(,#

 

.7

#

-, )!.,

0) #!1)( C1W,

!1 r#. ,

,,n(

 

 

У unрt

к uЧn7

У

эюunрttiкunЧtrc у.!2 F#,#

72 n!. ( ,,6

r

!0#)(х,W

17 (!С

(!

О

(#

-.#3(#,

## 7.# -,!

7(-c

 

,! 7-# )(7(!

B,!

n2 , (,6-1

0)#!1)

(C!

7(,6

1!

.6i,i

B, -.!7!i

,,0i

,(.!i

.(.

ьiк

<С7 .#(6i,iС

,(.!i

.(.

гiУЧОc

(#

.#.(#,

r,!ankA!(#1 7(!С

0!,!.1

B,!

r,!

.!

F#,

0),

7!.,,6

. 0!,#)#

.(

((2gc

 

 

 

 

 

 

Овr ЧАСТЬ 2 тиъсусномооасн1а ооленнос Сооноеоо аооленас не вп

Отношение Я ВЛЯЕТСЯ не рефлексивно. Следовательно, несмотря на то, что "Запорожец" является автомобилем, автомобиль - не обя­ зательно "Запорожец". Аналогично BankAccount - не обязательно ЗАПОМНИ! savingsAccount, так что неявное преобразование в этом направле­ нии запрещено. Последняя строка разрешена, поскольку в ней про­ граммист явно указывает, что он берет на себя ответственность за

выполнение данного преобразования.

Неверное преобразование времени выполнения

В общем случае приведение объекта от типа B a n kAccount к типу SavingsAccount - достаточно опасная операция. Рассмотрим следующий пример:

т

:)

ы

:):,р ,хр),

Чр

им нгоыимnr))р им 'ыимnr))р им ,

 

цц

 

 

: н Т ,,,,

к ,, " НW

 

'ыимnr))р им к ",т р

 

цц

:им1r))р

y

:им1r))р

им :

 

им

ы им:1 r))р

им=

=

=

Метод ProcessAccount ( ) выполняет несколько операций, включая вызов метода Accumulateinterest ( ) . Приведение Ьа к типу SavingsAccount необ­ ходимо, поскольку объект Ьа объявлен как BankAccount. Программа корректно компилируется, так как все преобразования типов выполнены явно.

Все нормально работает при первом вызове ProcessAccount ( ) из Test ( ) . Объект SavingsAccount передается методу ProcessAccount ( ) . Преобразование типа из BankAccount в SavingsAccount не вызывает проблем, поскольку объект Ьа изначально был объектом типа SavingsAccount.

Однако со вторым вызовом ProcessAccount ( ) не все так гладко. Преобра­ зование в тип SavingsAccount не может быть разрешено. Объект Ьа не имеет метода Accumulateinterest ( ) .

Некорректное преобразование типов генерирует ошибку в процессе выполнения программы (так называемую тнн эsы eг дфддныeхаБддт дlы (run-time error)). Ошибки времени выполнения гораздо сложнее

ВНИМАНИЕ!

найти и исправить, чем ошибки времени компиляции. Что еще более

 

ГЛАВА 1 6 Наследование 361

Избеrание неверных преобразований

спомощью оператора is

 

,.". Оу..е6

6 ....5р .

.-.".-Ф .. ."..,..."

,.Ф. ..

."

..,...ц..

.."

.,.,.-....

 

,.

".

,. .,а.....,Фц."

 

..,,.

...

.,9.-

6n....-.

.,.,.

.,.

.-. ..."Ф...4

 

..,"..-б".-..,

 

..,."..-.Ф.,.

 

.Ф. 9."."

 

..-

.Ф..,..r

.Ф"

.-

?6 .

s62

 

 

 

 

 

 

 

 

 

 

 

 

 

y.,.-.".

 

 

6."Ф. -,. ".

,.. . .-.,...,

Ф,. "

"-....,..-

. ...

.

.-.,

...,

..-."."

y.,.-.".

."...-К-,.

 

..-.,..,

.

iеЗ ,.Ф. ...

..,.,..

..."Ф

.,...

".

, ..- .Ф,.- ."..,....

.

...".

...-.-e

.". ".,.-.".

 

.".."

..."Фц

.".-.4 .Ф.

 

..".,...

 

.".. ...

".

. ..,"..-.".-...

.,.,.

 

,1" ..."Ф.,..,.e

 

Д.,....К..

 

....,.

.".."

."

.8.4..".-.ц

.

....,.,..,.

 

 

".,.-.".-

. 6

.."

.".."Ф..

 

...,.-.4

" ....

..,.,..

..."Ф.,...e

 

 

 

 

 

 

 

 

 

 

 

 

Ф

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ч

 

 

 

 

 

 

 

 

 

 

 

гЕ

.

..4

 

. 1

. .

..

.,.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ч

 

 

 

 

 

 

 

 

Ч

Ч

Ч

Ч

Ч

Ч

 

 

 

Ч

 

 

 

 

 

 

 

".-.Ф,..,

.......4..

. 6

.-,.

-.-....

.." ..,"..-.".-..,

...,. ..

."Ф.,."

."Ф4."

,.Ф. ".

,..

. s - 1 n....-. .

.,......,Фц."...

 

.,,. ...

.,9.-

6n....-.

2Д.. .,..".

.щ."., .,.".- О

..е66n...-.

. . ".,.-.".

.6

.,.

.,. ..-.,..,

ру

е." ...

..".".

...".,н

."..-

. .,.". ...,.

.,.,.-.

".

,..

...e ЧАСТЬ 2 Объектно-ориентированное программирование на С#

 

'i: ет'i:

 

с'i:о'i:ет етo

с'i:

о

ет'i:

ет o o в

'i: ет

о 'i:оo 'i:

o'i:етв

оoс'i:о'i: 'i:в

oетв'i: 'i: ет

'i:

в

'i: о

етвет'i: ет

 

о

'i:

с'i:о'i:ет о

'i:

ет в

совет

ов

светв 'i:

'i:'i:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Избегание неверных преобразований

 

 

 

 

 

с помощью оператора as

 

 

 

 

 

 

 

 

хъ1.3#1 1.С#3.ъ3 1ъМ9#a

019#.къ къ4#Зъ1.3#1

4ъМ3#п#Тп1.3.

Т1.къ10Н30З.

 

#1 З1ъ#С1.ТПъ3#С

ъ93Мaъп#3. МъСНп 30х МЗ1.п. 1# х10

­3#4п#Тп1. .ъ3

ъМa03.9#ъх1ъ#С1.Т#п.10ъ 1ъ9#11ъ931#

п4ъМ3#нъ

1ъ1.ы00 #ь0С90 п1ъ4ъ10пИх#a1ъ10Нх10 0Мх#a

Т#п.100#СИк1#н#х1ъ#С1.

Т#п.10Н

.9к3# пИ пМънrr#a.г1И х1#пъ1Н3

1ъ 1.пъ1

a0 1ъТПa

31..3С#3И

#хъ1.3#1. ММИa9ъ

 

 

 

 

 

 

 

 

 

 

 

ь

е

 

 

 

 

 

 

 

 

 

 

 

 

ь

ть

 

е

а

 

 

 

 

5

в

ЗАПОМНИ!

ВНИМАНИВ

.. ОЗЧНЕ Е!ЕМНН Е!Н!ЕНА СНН!ЕОММАНАОСНННАОНC !Р ПНПЗО!НН .!!НПe АМКИСЗtЕ!И ЕН ЕКСЕО!ИБНА ЕННОЗННКОКНИМНКИАОКННЕБ ПНПОЕНННП АОН0Р АННЗЕНА!КЕТ .АНЕОКpСНОКННПМЕ НЧОМЕЕО!CКОКНИМНЕМЕОЕ!Нe !ЕРЧНЧО ЕННОЗННКОКНИМБАМСНd

- ЕО!Н!НИМРI ИН ННЗОАННАЕ ЕНННЕНИИСЕМ АМЕОККИНМНИМЗ АНП МАОКС ИНЕО!НАН ЕНМЕНИБАCНЧОЕ АНПМЕМАМСНЕМПНП и ки

М ЕО!ОЗИСЕМТЕХ.. .АОЕ Е!ЕМНН ЕНН! ЕОМАМАН!CИННМЕЕО!CКОКНАC ОСНННАОН

БЕТТК!И ЗАНСК

nНЕЕЕОАНМЕЕ!Н!ЕРЧМН ЕКБКНИИСНП!НЕЕСp

ГЛАВА 1 6 Наследование еоее

АО.СоОЕОМНННК!МММАН!ПН ИИЕПБКНИИСТЕИ!!Е

ЕО.ОЗ П!НЕЕН Е МЕe

оО!НКОПНИМИЕОоИННАОНН!,B А,

оНОМКПО!МАПЕИП!НЕЕС ОАО!ИОeОО.

ЧИ оНИ!ПНb .НКОПОeОП!НЕЕН

ТЕХlЧТЕХНПМЕО.ННКОЕ: !Р.ОЗ

П!НЕЕ1

ЗАПОМНИ! ПОАОНСЗБПИОИИ ИНЕ!И!ЕИА !НЕeОЗ П! НЕЕl ИНЕ!И!ЕИА П!НЕЕ

ТЕХlЧd

И КИНММА!ПНp Е!И!ЕРЧМТ

ПСНН!ИИМБ О.)БП!БРА

П!НЕЕС Е О!ИМЕ М

АИЕ !И .НКОПСЕ П!НЕЕОЕ

Т ЕeХ

 

 

\

Е!.ЧМЗ .НКОПСЗ П! НЕЕ ТЕХleоОКПО!БИАИНоМЕНАН!И!ЕРЧМЗ О.О.ЧИИИСЗ oИАО!

!I

"'J

b

I

К

nИАО! ТЕХЕlt!ТЕХf0eK.l ЕО!ИА .САН ПСКПНИ!!Б

О.)ИПАН!Р.ОeО АМоНd Р!

МИПОИЕ!ОПО !, ЕО!ИА ПОИПИНАМНОПНАНt m0! ,,

МК ТЕХleТЕХ

364 ЧАСТЬ 2 Объектно-ориентированное программирование на С#

Наследовани.е и конструктор . _

Программа InheritanceExample, с которой вы встречались ранее в этой главе, применяет методы Init . . . ( ) для инициализации объектов BankAccount и SavingsAccount и приведения их в корректное состояние. Оснащение этих классов конструкторами - это, определенно, правильное решение, хотя и со своими сложностями. В следующих разделах показано, как преодолеть пробле­ мы, связанные с использованием методов Init . . . ( ) .

Вызов конструктора по умолчанию базовоrо класса

-шI09-rnI0-59e S-ILQ09989eL7u40rn8lrnl80-59eL- 1954eL-4 S- eN-Q 0 17о j0rn-8-сLQ0990 -1954eL5-4 S-ILQ0990085-N057б-9L78lrnl80-5 L-1 954eLB-4 базового поаттаoчтоы нсмиеыиаыярскороыярсномоииечымаоооымокеиб твра. сеииечыяреaраккиЫы

1:им6

,гV

 

х

 

рх

 

 

 

 

 

 

цц rим,8хS

им: 1rсрим

 

 

 

 

 

 

 

цц

тш(,

_ и3,м :

им:

1rсрим

 

х

(

рх

 

 

 

 

 

шг,

 

 

 

 

 

 

т

:(

(rш

 

,хр1хшг

 

 

 

 

 

 

 

 

 

 

 

т

: (

 

:(ш

р\,

"ш :имn

:хим1 t К шх1

т

 

 

 

 

 

срим р"r,eх:

,г:им,

n тср

ш

,

 

гош

r,сш

т тW

 

 

гош

с,rш

 

.

им,

гош

,сrш П Wт

 

 

 

 

 

 

срим

р"r,eх:

,г:им, П Зимсрт

ш

,

6

'с­ш

т тW

 

 

6

'сТш

(.

им,

6

 

сrш

n т V

 

 

 

 

 

 

цц

 

 

 

,г:им,

n тIш

,

(,им

,х[

т

/

 

 

 

срим рr,Нeх:

 

 

 

срим

р"r,1,ш,

n тW

т

 

 

 

к " тт" W

 

 

 

 

 

 

 

 

 

 

т

rS((rш

 

гош

r,сш

 

 

 

 

 

 

 

 

 

 

 

т

t:(

гош

r,сш

П Н

 

 

 

 

 

 

 

 

 

 

срим рr,"eх:

,н:им,

n т вр

( т

гошрт

x,сш

т т W

 

т

:(

(rш

 

6

сrш

 

р гош

x,сш

 

 

 

 

 

 

т

rS(6

 

сxшn т

 

 

 

 

 

 

 

 

 

 

 

срим r,р"eх:

,г:им, n т

 

6

 

rшс

тWт

 

ГЛАВА 1 6 Наследование 365

 

!!!!N!,

A!!.i!!!,;!!!N

I!

!!.i!.i!D D!!.iB!!

A!a!!!A!!

We!!D! e!!A!,i

 

t!D!!B

I! !!.i!.iya!!.i!!!!AA!B A! !!.iA!D!

!!,;P!P!

Ia!!.i!.i!ya!!!!.i!!Dn

ЗАПОМНИ!

a,!!

!.i!-!B

A!D!B

D!!NA!B e!!D

!D!

!.i!!!!

!!A!!.i!!!.i,

! I I!Ai

!.i!!,;I!!!!!

Ia!!.i!.i!D a!!D!!

M!! -,;! !! D!eD!AI!A!.i!!,;IW!!

D!!NA!P!

 

e!!D!

!a,

!P!

a!!.i!!!!A!,y

A!!!

a!!.i!!!!!B

A!DA!B e!!D

lM!D!!A!

 

! a!!M!A!

e!!P!

I!D!!B

 

I!!!.i!.i

!.i!!

!!D!M!!! e! !.i!-,y ! eA!M!!ya!!n

 

Ia!!.i!.iA! !!aD!A

!!D!M!!B e! !A!d!!a!e!d!E

M!!A!D-!e!D!P! Ia!!.i!.i!i

 

etWАett!!!D!A

a!a,;M!!B D!e!!DA!!.iWB!.iI!A!.i!!,;!!!D!!B

!.iD!! Ma!n

 

A!

!!

!!P!

I!I

M!!A!

И

Аett!.i!!P,;!

I A!!

!-!!!!!B!.i,

!d!!B

 

A,;DA!!.i!!D!!B

a!!!!

!!!!P!B

 

 

 

 

 

 

Передача арrументов конструктору базовоrо класса

r!.<ankA(1160de06(0,<!21P ,1<,!,

a!

1-!.B(2(7

2(de!6! <ankA(11(01ankA(,!ankA3i

<! 20 1<(de(2! (2!0

.(60 (de<!21,,1<P!,(

a!.<ankA(11(20б 16.17e0F!11

<!2i

1,,1<,!,!-

a! 1-!ankAB(2(7iг!P 20-2!

(1a,(6.022(1

.0-!21,,(c(!22(1

a,!i

F,(--(k(.ankA71,,(,17e(1

1<(de(22!0

 

 

 

 

-S

-S

-S

uу

u 5

у . у

u у

 

u .

u ц. у

u

у

Овв

ЧАСТЬ 2 тиъсуснодооаснсаооленнос чоо оеоаоол енСс не Ап

ГЛАВА 1 6 Наследование 367

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