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

Обновленный класс BankAccount

 

. r­ ankAig_B

ankAB­ Н ­а,;.

_B rrB

,, c1;1Qtr1;1,ЛЖ­р.,g

crrr,t,1;1 Н_ .К}1igBЕuа,;..g

i­р­

­рankAu­.ЕankAankAЕ. i Ир

К}1.r­ ankAig_B­ankAankAН ­ ­ _Brr в ЖЗankAnс, К}1­,бrr

r,t,1;1

g­ Е._i

__

r­ankAig_Иrg­_Ж­р.,g crrr,t,1;1

.g Н. _.К}1BЕBgе

_ankA­

rB

_р r­ ankAigrgИ­

К}1­,бrrr,t ,.з

К}1i.е Н__Е .К}1.ankAgв­ uеr­ r.g­К}1 Т­

, ч h

ИrBсBankAr­в.ankAig_И­_rgв

­x- x-

.Врa ,o.,1;1a

369

370

­ 047­ 0745 0­ 40 45 740 5 7 ­ 5

Класс SavingsAccount также предоставляет в распоряжение программиста два конструктора. Конструктор SavingsAccount, принимающий в качестве ар­ гумента величину процентной ставки, вызывает конструктор SavingsAccount, принимающий в качестве аргументов величину процентной ставки и началь­ ное значение баланса, передавая в качестве последнего О. В свою очередь, этот конструктор наиболее общего вида передает начальное значение баланса со­ ответствующему конструктору BaseClass (все это отражено на диаграмме на рис. 1 6.1 ).

Bank Account (01

) передача баланса базовому классу

Savings Account (12.5%1, 01

) баланспоумолчанию - нулевой

Savings Account (1 2.5%1

Рис. 16. 1. Передача параметров в цепочке вызовов конструкторов

Программа модифицирована таким образом, чтобы избежать вызова вну­ тренних методов Ini t . . . ( ) , заменив их автоматически вызываемыми кон­ структорами. Вывод этой демонстрационной программы ничем не отличается от вывода ее предшественницы.

Обратите внимание на свойство Balance класса BankAccount, ко­ торое представляет собой открытый метод доступа для получения значения, но защищенный - для его установки. Применение клю­ СОВЕТ чевого слова protected предотвращает использование этого метода извне класса BankAccount, но разрешает при этом его применение наследникам данного класса, например в методе SavingsAccount . Accumulateinterest, где свойство Balance находится слева от опе­ ратора присваивания. (Свойства и ключевое слово protected рассма­

триваются в главе 1 5, "Класс: каждый сам за себя".)

С БОРКА МУСОРА И ДЕСТРУКТОРЫ С#

Язык С# предоставляет метод, обратный конструктору и именуемый деструк­ тором. Деструктор имеет то же имя, что и имя класса, но предваренное симво­ лом тильды (~). Например, метод ~BaseClass ( ) является деструктором класса

BaseClass ( ) .

Язык С# вызывает деструктор, когда перестает может иметь только деструктор по умолчанию

использовать (не имеющий

объект. Класс параметров),

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

поскольку виртуален

деструктор не вызывается явно.

Кроме того,

деструктор всегда

.

При использовании наследования деструкторы вызываются в порядке, об­ ратном порядку вызова конструкторов. Таким образом, деструктор подкласса вызывается перед деструктором базового класса.

Деструктор в С# гораздо менее полезен, чем в ряде других объектно-ориенти­ рованных языков программирования, таких как С++, поскольку в С# использу­ ется недетерминированная деструкция. Этот термин и его важность требуют

определенных пояснений.

Память для объекта выделяется из кучи при выполнении команды new, напри­ мер new SubClass ( ) . Блок памяти остается зарезервированным до -ALdlпор, пока имеется хоть одна корректная ссылка на эту память. Вы можете иметь несколько переменных, ссылающихся на один и -\-жеlобъект.

О памяти говорят, что она недостижима, когда из области видимости выходит последняя ссылка на нее. Другими словами, никто не в состоянии обратиться к блоку памяти после утраты последней ссылки на нее. Когда блок памяти ста­ новится недостижимым, С# не предпринимает никаких конкретных действий. В фоновом режиме выполняется низкоприоритетный системный процесс, ко­ торый проводит поиск недостижимых блоков памяти. Такой "сборщик мусора" запускается, когда в работе программы наступает затишье, чтобы не повлиять отрицательно на ее производительность. Когда сборщик мусора находит не­ достижимый блок памяти, он возвращает его в кучу.

Обычно сборщик мусора незаметно работает в фоновом режиме и получает управление только на короткие периоды времени, когда начинает чувство­ ваться нехватка памяти.

Деструкторы С#, такие как ~BaseClass ( ) , являются недетерминированными, поскольку не вызываются до тех пор, пока объект не будет подобран сбор­ щиком мусора, а это может случиться через продолжительное время после того, как объект перестанет использоваться. Можетдаже возникнуть ситуация, когда программа завершится до того, как будет выполнена очередная сборка мусора, и в этом случае деструктор не будет вызван вообще. Недетерминиро­ ванный означает, что вы не можете предсказать, когда объектбудетуничтожен сборщиком мусора. Может пройти немало времени до того, как объект будет подобран сборщиком мусора и будет вызван деструктор этого объекта.

Основной вывод - программисту на С# использовать деструкторы приходит­ ся очень редко. В С# имеются другие способы вернуть системе захваченные ресурсы, которые больше не нужны, - с применением метода Dispose ( ) , из­

учение которого, увы, выходит за рамки настоящей книги (вы можете прочесть о нем в разделе Disposemethodсправочной системы С#).

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

П ол и м о р ф и з м

В ЭТО Й ГЛ А В Е . . .

)) Скрывать или r е·рекрывать метод ба_зового класса? )) Создание абстрактных классов и методов

>) Применение ToString

ев>) Защита класса от наследования

индеВотиваеыочтодзетоВвомррдиннрИысаныонобаттеодевеВсрiоiо рдинние:ира м обсичоммоy rво ночВиттрдиннSavingsAccount, ротосеь виндеВретодеве=Виввееа метоВеyтираерирDeposit ( ) , от бичотоiо рдинниBankAccount. цтоыодечвовоs стоаовеВонтитоовоВдз аматифаа обум ертотсеидтвоiомасибдендате ве чвиетеада чибедахототироевиндеВотивае

рдиннотоатиьтеy адитрW.хИaиндеВотиваееТб арсотодвотизыеотысеВнтитдзетнобоьоысеВедеввеьтаы ыеоахвове аче

читвеивеiотаВиRиыотомротоовитеыодвзеттеrе nрврфаахотоа дтбиз ыеотr mви моrет теыодвзтта сзВ Воыодватедтвеenрврфаьyво рирмавамрм ови Водrви сеидачотиттбиготрт nрврфат ыеоа. ыоВоiсетиттеВрерса стомтин ве Водrво беныороаттsотор вее твртсаsртоеенВедида рирысоВитефнрмедм тиратнроаттеети/еь rеве ыотироьфевеви синысоВиrеу е е

ытоорачсеваз обеовоаоыотсебатедзотдаy оазмарсотодвотоьыеоаотобеое воь ве тиртиrве i да/т бе ова обемо а ототаттдтбамее бдтВи. во енда тчадзврттви стонтоорачсеваз ыеоаyтоста отдаоазнтивотзтнзрсиьвенрпем нттеввеnыонродтрртвртсеввеернтсоьнттоыеоеьнотес/еввосигдаово

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