ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2025

Просмотров: 3229

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

// B a n k A c c o u n t - б а н к о в с к и й с ч е т

public c l a s s

B a n k A c c o u n t

(

 

 

 

/ / Первый

н о м е р

с ч е т а

— 1 0 0 0 ; н о м е р а с ч е т о в

/ / н а з н а ч а е т с я п о с л е д о в а т е л ь н о

s t a t i c i n t n N e x t A c c o u n t N u m b e r = 1 0 0 0 ;

/ / Номер

с ч е т а и

е г о

б а л а н с

i n t n A c c o u n t N u m b e r ;

 

double d B a l a n c e ;

 

 

/ / Р а з м е щ а е м в е с ь и н и ц и а л и з и р у ю щ и й к о д в о т д е л ь н о й / / ф у н к ц и и , в ы з ы в а е м о й и з к о н с т р у к т о р о в

p u b l i c B a n k A c c o u n t ( ) / / А в т о м а т и ч е с к о г о к о н с т р у к т о р а н е т

{

I n i t ( + + n N e x t A c c o u n t N u m b e r , 0 . 0 ) ;

p u b l i c B a n k A c c o u n t ( d o u b l e d l n i t i a l B a l a n c e )

{

I n i t ( + + n N e x t A c c o u n t N u m b e r , d l n i t i a l B a l a n c e ) ;

/ /

К о н с т р у к т о р с

н а и б о л ь ш и м к о л и ч е с т в о м а р г у м е н т о в

/ /

в ы п о л н я е т в с ю

р а б о т у

 

p u b l i c B a n k A c c o u n t ( i n t

n l n i t i a l A c c o u n t N u m b e r ,

 

 

d o u b l e

d l n i t i a l B a l a n c e )

{

/ / Н а с а м о м д е л е т у т н а д о п р о в е р и т ь , ч т о б ы з н а ч е н и е / / n l n i t i a l A c c o u n t N u m b e r ( а ) н е с о в п а д а л о с у ж е

/ /

н а з н а ч е н н ы м и н о м е р а м и с ч е т о в и ( б ) б ы л о н е м е н ь ш е

//

1 0 0 0

 

 

I n i t ( n l n i t i a l A c c o u n t N u m b e r ,

d l n i t i a l B a l a n c e ) ;

p r i v a t e v o i d I n i t ( i n t

n l n i t i a l A c c o u n t N u m b e r ,

 

d o u b l e

d l n i t i a l B a l a n c e )

{

n A c c o u n t N u m b e r = n l n i t i a l A c c o u n t N u m b e r ;

/ / И с п о л ь з у е м п е р е д а н н ы й б а л а н с ( е с л и о н п о л о ж и т е л е н )

i f ( d l n i t i a l B a l a n c e

< 0 )

{

 

d l n i t i a l B a l a n c e =

0 ;

}

d B a l a n c e = d l n i t i a l B a l a n c e ;

}

p u b l i c s t r i n g G e t S t r i n g O

r e t u r n S t r i n g . F o r m a t ( " # { 0 } = { l : N } " ,

n A c c o u n t N u m b e r , d B a l a n c e ) ;

11. Классы

257


Здесь метод I n i t () выполняет всю работу, связанную с конструированием. Одни по ряду причин такой подход недостаточно " к о ш е р н ы й " — не в последнюю очередь! за того, что при этом вызывается метод объекта, который еще не полностью построй это очень опасная игра!

 

К счастью, такой подход не является необходимым . Один конструктор«

 

жет

обращаться к

другому с использованием ключевого слова t h i s а

 

д у ю щ и м

образом:

 

 

/ / B a n k A c c o u n t C o n t r u c t o r s A n d T h i s - б а н к о в с к и й с ч е т с

/ / н е с к о л ь к и м и к о н с т р у к т о р а м и

 

u s i n g S y s t e m ;

 

 

 

n a m e s p a c e B a n k A c c o u n t C o n t r u c t o r s A n d F u n c t i o n

{

 

 

 

 

 

u s i n g

S y s t e m ;

 

 

 

p u b l i c

c l a s s

P r o g r a m

 

 

{

 

 

 

 

 

p u b l i c

s t a t i c v o i d

M a i n ( s t r i n g [ ]

a r g s )

{

/ / С о з д а н и е б а н к о в с к о г о с ч е т а с к о р р е к т н ы м и н а ч а л ь н ы м и / / з н а ч е н и я м и

B a n k A c c o u n t b a l = n e w B a n k A c c o u n t ( ) ; C o n s o l e . W r i t e L i n e ( b a l . G e t S t r i n g ( ) ) ;

B a n k A c c o u n t b a 2 = n e w B a n k A c c o u n t ( 1 0 0 ) ;

C o n s o l e . W r i t e L i n e ( b a 2 . G e t S t r i n g ( ) ) ;

B a n k A c c o u n t b a 3 = n e w B a n k A c c o u n t ( 1 2 3 4 , 2 0 0 ) ;

C o n s o l e . W r i t e L i n e ( b a 3 . G e t S t r i n g ( ) ) ;

/ / О ж и д а е м п о д т в е р ж д е н и я п о л ь з о в а т е л я

C o n s o l e . W r i t e L i n e ( " Н а ж м и т е < E n t e r > д л я " +

" з а в е р ш е н и я п р о г р а м м ы . . . " ) . ;

C o n s o l e . R e a d ( ) ;

}

/ / B a n k A c c o u n t p u b l i c c l a s s

- б а н к о в с к и й с ч е т B a n k A c c o u n t

{

/ / П е р в ы й н о м е р с ч е т а — 1 0 0 0 ; н о м е р а с ч е т о в

/ /

н а з н а ч а е т с я п о с л е д о в а т е л ь н о

s t a t i c i n t n N e x t A c c o u n t N u m b e r = 1 0 0 0 ;

/ / Н о м е р с ч е т а и е г о б а л а н с

i n t

n A c c o u n t N u m b e r ;

d o u b l e d B a l a n c e ;

/ / В ы з ы в а е м к о н с т р у к т о р

с н а и б о л ь ш и м к о л и ч е с т в о м

/ / а р г у м е н т о в , п е р е д а в а я з н а ч е н и я п о у м о л ч а н и ю д л я

/ /

о т с у т с т в у ю щ и х п а р а м е т р о в

258

Часть IV. Объектно-ориентированное программирован


p u b l i c

B a n k A c c o u n t ( )

: t h i s ( 0 ,

0 )

{ }

p u b l i c

B a n k A c c o u n t ( d o u b l e d l n i t i a l B a l a n c e )

: t h i s ( 0 , d l n i t i a l B a l a n c e )

{ }

 

/ /

К о н с т р у к т о р с н а и б о л ь ш и м к о л и ч е с т в о м а р г у м е н т о в

/ /

в ы п о л н я е т в с ю р а б о т у

p u b l i c B a n k A c c o u n t ( i n t n l n i t i a l A c c o u n t N u m b e r , d o u b l e d l n i t i a l B a l a n c e )

{

/ / И г н о р и р у е м о т р и ц а т е л ь н ы е н о м е р а с ч е т о в ; н у л е в о е / / з н а ч е н и е о з н а ч а е т , ч т о м ы х о т и м и с п о л ь з о в а т ь / / о ч е р е д н о е с в о б о д н о е з н а ч е н и е н о м е р а с ч е т а

i f ( n l n i t i a l A c c o u n t N u m b e r < = 0 )

{

n l n i t i a l A c c o u n t N u m b e r = + + n N e x t A c c o u n t N u m b e r ;

}

n A c c o u n t N u m b e r = n l n i t i a l A c c o u n t N u m b e r ;

/ / И с п о л ь з у е м п е р е д а н н ы й б а л а н с ( е с л и о н п о л о ж и т е л е н ) if ( d l n i t i a l B a l a n c e < 0)

{

d l n i t i a l B a l a n c e = 0 ;

}

d B a l a n c e = d l n i t i a l B a l a n c e ;

p u b l i c s t r i n g G e t S t r i n g ( )

{

r e t u r n S t r i n g . F o r m a t ( " # { 0 } = { l : N } " ,

n A c c o u n t N u m b e r , d B a l a n c e ) ;

В этой версии класса B a n k A c c o u n t имеются те же три варианта конструкторов, что ив предыдущих демонстрационных программах. Однако вместо повторения некоторых проверок в каждом конструкторе более простые конструкторы вызывают наиболее слож­ ный и гибкий конструктор с использованием значений по умолчанию, а в нем и выполня­ ются все необходимые проверки. Наличие функции I n i t () становится ненужным.

Создание объекта с использованием конструктора по умолчанию включает вызов

инструктора B a n k A c c o u n t

( ) :

 

 

 

 

BankAccount b a l =

n e w

B a n k A c c o u n t ( )

;

/ / П а р а м е т р о в н е т

Конструктор B a n k A c c o u n t

()

тут же

передает

управление конструктору B a n k A c ­

count ( i n t , d o u b l e ) , передавая ему значения по умолчанию 0 и 0.0:

public B a n k A c c o u n t

()

:

t h i s ( 0 ,

0)

{}

 

Поскольку тело конструктора пустое, весь конструктор можно смело записы­ вать в одну строку.

Глава 11. Классы

259



П о с ле выполнения основного конструктора с двумя параметрами управление возвра щается конструктору по умолчанию, тело которого в данном случае совершенно пустое Создание банковского счета с ненулевым балансом и номером счета по умолчанию

осуществляется следующим образом:

p u b l i c B a n k A c c o u n t ( d o u b l e d ) : t h i s ( 0 , d ) { }

Невозможно создать объект без конструктора какого-либо вида. Если вы определите собственный конструктор, С# будет работать только с ним. Объединяя эти два факт можно создать класс, который может быть инстанцирован только локально.

Например, создать объект B a n k A c c o u n t , если конструктор объявлен как internal (показан полужирным ш р и ф т о м в приведенном далее исходном тексте), могут та методы, определенные в том же модуле, что и B a n k A c c o u n t .

/ / B a n k A c c o u n t - м о д е л и р о в а н и е п р о с т е й ш е г о б а н к о в с к о г о с ч е т а ' p u b l i c c l a s s B a n k A c c o u n t

/ / Н о м е р а б а н к о в с к и х с ч е т о в н а ч и н а ю т с я с 1 0 0 0 / / н а з н а ч а ю т с я п о с л е д о в а т е л ь н о в в о з р а с т а ю щ е м s t a t i c i n t n N e x t A c c o u n t N u m b e r = 1 0 0 0 ;

/ / Д л я к а ж д о г о с ч е т а п о д д е р ж и в а ю т с я е г о н о м е р i n t n A c c o u n t N u m b e r ;

d o u b l e d B a l a n c e ;

и

по р я д к е

иб а л а н с

internal BankAccount() // Конструктор

{

n A c c o u n t N u m b e r = + + n N e x t A c c o u n t N u m b e r ;

d B a l a n c e = 0 ;

}

p u b l i c s t r i n g G e t S t r i n g O

{

r e t u r n S t r i n g . F o r m a t ( " # { 0 } = { l : N } " ,

n A c c o u n t N u m b e r , d B a l a n c e ) ;

260

Часть IV. Объектно-ориентированное программирова