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

Что произойдет при объявлении нового экземпляра?

гощ

 

,,

r . им,

гощ n,т {

им(:рим n т

,

r. 6

рг,:

им(

:римn тx

цц 6рг,:

гощ

 

,

.л им,

",х:

,,

n vW

им( рим: n p т

,

лй6

рг,:

им( :р имn т{

цц 6рг,:

",х:

й6

,,

r

им,

",х:

,, n тW

им( :рим n : т

,

 

рг,:

им(

:римn т{

цц 6рг, :

Что здесь происходит? В зависимости от того, как вы реализуете клас­ сы, значение по умолчанию для необязательного параметра устанавливается по-разному. В первом примере exl является объектом Base, и необязательный параметр по умолчанию равен О. Во втором примере присваивание Derived переменной ех2 с применением приведения допустимо, поскольку Deri ved является подклассом Base, и значение по умолчанию в этом случае также рав­ но Вnтретьем же примере экземпляр Derived создается непосредственно, и значение по умолчанию равно 1 . Обычно такая разница в поведении второго и третьего примеров оказывается неожиданной для неискушенного програм­ миста.

Ссылочные типы

Ссылочные типы, как говорилось в части 1 , "Основы программирования на С#", представляют собой типы переменных, которые хранят ссылки на фак­ тические данные вместо самих данных. Обычно о ссылочных типах говорят как об объектах. Новые ссылочные типы реализуются с помощью

)) классов, )) интерфейсов и )) делегатов.

Перед тем как их использовать, их нужно создать. Сам по себе класс не яв­ ляется ссылочным типом, в отличие от, скажем, класса Calendar. Вы можете передать ссылочный тип в метод так же, как и статический тип. Он рассмат­ ривается как параметр, который вы используете внутри метода, как и любую иную переменную.

Но можно ли передавать ссылочные типы так же, как и статические типы? Давай попробуем. Например, если у вас есть метод Schedule в классе Calendar, вы можете передать в него идентификатор Courseid или весь Course. Все зави­ сит от того, как вы структурируете приложение.

т :( (rщ пр х ,

т:( :им пр х ,F,{

т:( х:им1 ,щг, W

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

=

=

 

m+(- *)-(*(=-(G(G+=

(*(G*==;(-(+(=(

 

S

 

-(+(=tS;(+(*==

*)T)-((+

s

) S-(+(=t;(+(*==

 

*)T)-((+GG==(ET==+)

s

( Sl

G=(=T)=+) =-==(+G=+)

-( t

(+(-=E+(

s

 

S m+(v=(GG( T( G+(+)A(Gv)=

+) +(v(=;(;

{r=

s

 

 

S

 

 

 

 

 

S S (==(*=)-(=T((===(o

 

+((G=)-==(E(+)+(tA+(==- (*(= -(+(=

 

+(==T==

(*(-(+*

s

t;(=(S-t (G=)

-=E(+)+(tE+(==(T

(=-(=A(T)=

G(==(-(=T(-==;=*Gt-=

*(G ( ( =G;((+( m

(+ (*(-(+*

+(===(==

(E(=(

T( =G+(T(-v=G+(+)A(G;(G( i(=(G( A)G=(*(-T=- )=) ;(;(-=

+()T(-= =T(A(

T)=tT( +(v=)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

{=T(;(

m+(T( *(=*(i(T(l

 

(-) ;(-

 

=( =G;((+T((===(+(==T=( (*(-(+

*=+(==;( ===G+(+)E(G;)E+)

 

 

)==+(*G((=

)+-(- (= m+(-l

=-(

=(+( (=(=+) (G*(T)A(T)(

 

*)T)-(=

s

 

--S (+(=(

 

S )

G(==(S-(=

T(-==;=*G-+(=( G(==+)=l

 

 

 

 

 

 

 

 

 

 

 

 

 

Выходные параметры

 

 

 

 

 

 

 

 

 

 

 

 

 

th0F!.T0#

(,(-#,,0

g,!

,#

(,(-#,,0

- L(FT(,1,#

-#,!.(ж .!,!,0#

f(.i

,(B#Ln( (2-#T17, 2T(>#T(#

 

#,#-#TT!3ж #,#.(-(#-!3

- T(F

!.32!-(,#.#-d

(,(-#,, LL0.(#,L1 T( -#L,!

!.!6#T(#

(LF!.T!3

 

#,#-#TT!3( T# L!2.(#, ,(r

2!B17

.!

(7d

г0F !.T0#

(,(-#,,0 !2З1-.17,L1

-

L(FT(,1,#

 

-#,!.(

L

!-!i

e37

.. 7B#-!F!

L.!-( imaНim(n(F

(,(-#,,!-

-!6#,

20,3 L

!.3.!k L.!.3.!

-0

2(F!,(

# С-

,#.#.(F

,(21-T!F!ж .!T#BT!

unF!,1kж

#L.(

-0

(L

!.321#,#

(F

2!.3r

ch#kB#-

,!L

! (,1 ch,1.ж-(-ж-#,!1,T!k

 

L.#.1#,

2(.1-(,3L1

!2

(L !. 32!-(T((

 

 

 

ГЛАВА 21 Именованные и необязательные параметры

481

иного подхода (может быть, обобщенного списка?). Выходной параметр в объ­ явлении метода может выглядеть следующим образом:

т

c))

ш

:))рE, 6))3,,

r,ncим ))р

х

,j,D

 

 

 

 

р

cимц1имшг,D

 

 

 

 

р "ш

,B:г,

))3,, r,,B:г, т

 

имщг, =

=

=

 

 

 

 

 

 

=

 

 

 

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

Имено - ,н1)1е параметры .

Рука об руку с концепцией необязательных параметров идет концепция именованных параметров. Если у вас есть несколько параметров по умолча­ нию, то нужен способ сообщить компилятору, какой именно параметр вы пре­ доставляете методу. Например, взгляните на метод addit, показанный ранее в этой главе, после реализации необязательных параметров:

т

E)) ш E))им ш,,: . : им

Dcим

Diим

=

=

=

Очевидно, что в этой реализации порядок параметров не имеет значения, но если бы это был метод в некоторой библиотеке классов, то вы могли бы не знать, что порядок параметров не важен. Как тогда указать компилятору, что нужно пропустить параметры х и w, если вы хотите указать только v? В старые времена это делалось следующим образом:

:им шим

=

К счастью, больше прибегать к этому способу нет необходимости. Теперь, при наличии именованных параметров, можно написать

cим щим

. ,хщ,,: шб } o г DD 7pD p leт

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

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