14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

инт<strong>е</strong>рф<strong>е</strong>йсы и абстрактны<strong>е</strong> классы<br />

Модификаторы доступа<br />

Вы , * <strong>е</strong> зн а <strong>е</strong> т <strong>е</strong> , н а ск ол ь к о важ н ы м я .^ я <strong>е</strong> т с я к л ю ч <strong>е</strong>в о <strong>е</strong> с л о в о p r l v a t e , Л<br />

как <strong>е</strong>го нужно использовать и ч<strong>е</strong>м оно отлича<strong>е</strong>тся от ключ<strong>е</strong>вого слова ^ чл<strong>е</strong>нами (tnembers)<br />

p u b lic . В <strong>C#</strong> подобны<strong>е</strong> ключ<strong>е</strong>вы<strong>е</strong> слова называются модификаторами Людой чл<strong>е</strong>н мож<strong>е</strong>м быть<br />

доступа (access modifiers). М<strong>е</strong>няя модификатор свойства, поля, м<strong>е</strong>тода пом<strong>е</strong>ч<strong>е</strong>н модификамоили<br />

даж<strong>е</strong> вс<strong>е</strong>го класса, вы м<strong>е</strong>ня<strong>е</strong>т<strong>е</strong> способ доступа других классов к ука- Р°М доступа public или<br />

занным эл<strong>е</strong>м<strong>е</strong>нтам. В этом разд<strong>е</strong>л<strong>е</strong> мы вспомним про уж<strong>е</strong> изв<strong>е</strong>стны<strong>е</strong> вам priva <strong>е</strong>.<br />

модификаторы и познакомимся с новыми:<br />

сущ<strong>е</strong>ству<strong>е</strong>т<br />

доступ к объявл<strong>е</strong>нному классу.)<br />

Q public означа<strong>е</strong>т свободный доступ ^<br />

Пом<strong>е</strong>тив класс или <strong>е</strong>го чл<strong>е</strong>ны модификатором p u b lic , вы объявля<strong>е</strong>т<strong>е</strong> открытый<br />

доступ для вс<strong>е</strong>х экз<strong>е</strong>мпляров вс<strong>е</strong>х классов. Это наим<strong>е</strong>н<strong>е</strong><strong>е</strong> ограничивающий из модификаторов.<br />

И вы уж<strong>е</strong> вид<strong>е</strong>ли, причиной каких пробл<strong>е</strong>м он мож<strong>е</strong>т стать,<br />

зуйт<strong>е</strong> <strong>е</strong>го только тогда, когда это д<strong>е</strong>йствит<strong>е</strong>льно нужно. модификато -<br />

ра доступа при<br />

Q private означа<strong>е</strong>т доступ только для д руги х чл<strong>е</strong>нов этого ж <strong>е</strong> класса объявл<strong>е</strong>нии чл<strong>е</strong>на<br />

Пом<strong>е</strong>тив чл<strong>е</strong>ны класса модификатором p r iv a t e , вы оставля<strong>е</strong>т<strong>е</strong> доступ к ним класса о зт ч м т ,<br />

только для других чл<strong>е</strong>нов этого ж<strong>е</strong> класса или экз<strong>е</strong>мпляров этого ж<strong>е</strong> класса,<br />

_<br />

Сам класс можно пом<strong>е</strong>тить словом p r iv a t e , только <strong>е</strong>сли он находится внутри Private.<br />

другого класса. Посл<strong>е</strong> этого доступ к н<strong>е</strong>му сохранится только у экз<strong>е</strong>мпляров э т ^<br />

го вн<strong>е</strong>шн<strong>е</strong>го класса.<br />

Q protected означа<strong>е</strong>т откры тий только для производных классов<br />

Вы уж<strong>е</strong> вид<strong>е</strong>ли, что из производных классов н<strong>е</strong> вс<strong>е</strong>гда им<strong>е</strong><strong>е</strong>тся доступ к полям базовых, что н<strong>е</strong><br />

вс<strong>е</strong>гда удобно. Но любой чл<strong>е</strong>н класса с модификатором p r o te c te d доступ<strong>е</strong>н как в рамках <strong>е</strong>го собств<strong>е</strong>нного<br />

класса, так и из м<strong>е</strong>тодов производных классов.<br />

—' Отсутстви<strong>е</strong> модифика<br />

О internai означа<strong>е</strong>т открытый для други х классов в сборк<strong>е</strong> _ Х <strong>е</strong> н ы ? ^ й с с д или °ин"<br />

Встро<strong>е</strong>нны<strong>е</strong> классы .NET Framework являются сборками (assemblies) —<br />

библиот<strong>е</strong>ками классов, на которы<strong>е</strong> можно ссылаться из ваш<strong>е</strong>го про<strong>е</strong>кта.<br />

Их список можно увид<strong>е</strong>ть, щ<strong>е</strong>лкнув правой кнопкой мыши на пункт<strong>е</strong><br />

References в окн<strong>е</strong> Solution Explorer и выбрав команду Add Reference...<br />

Если при постро<strong>е</strong>нии сборки воспользоваться модификатором<br />

i n t e r n a i , доступ к классам буд<strong>е</strong>т осущ<strong>е</strong>ствляться только изнутри сборки.<br />

Сущ<strong>е</strong>ству<strong>е</strong>т вариация этого модификатора p r o te c te d i n t e r n a i ,<br />

воспользовавшись которой вы ограничит<strong>е</strong> доступ т<strong>е</strong>кущ<strong>е</strong>й сборкой<br />

и типами, которы<strong>е</strong> являются производными от сод<strong>е</strong>ржащ<strong>е</strong>го класса.<br />

s e a le d означа<strong>е</strong>т, что от данного класса н<strong>е</strong>льзя насл<strong>е</strong>довать<br />

Сущ<strong>е</strong>ствуют классы, насл<strong>е</strong>довани<strong>е</strong> от которых н<strong>е</strong>возможно. К ним относятся многи<strong>е</strong><br />

классы .NET Framework, попробуйт<strong>е</strong>, к прим<strong>е</strong>ру, создать класс, насл<strong>е</strong>дующий<br />

от класса S tr in g (м<strong>е</strong>тод этого класса IsEm ptyO rN ull ( ) вы использовали в пр<strong>е</strong>дыдущ<strong>е</strong>й<br />

глав<strong>е</strong>). Компилятор выдаст сообщ<strong>е</strong>ни<strong>е</strong> об ошибк<strong>е</strong> «cannot derive from<br />

sealed type ‘string’». Чтобы запр<strong>е</strong>тить насл<strong>е</strong>довани<strong>е</strong> от созданного вами класса,<br />

достаточно добавить ключ<strong>е</strong>во<strong>е</strong> слово s e a le d посл<strong>е</strong> модификатора доступа.<br />

__________ ______<br />

т<strong>е</strong>рф<strong>е</strong>йса означа<strong>е</strong>т, что<br />

буд<strong>е</strong>т использован вариант<br />

internal. При этом класс<br />

становится доступ<strong>е</strong>н для<br />

любого другого класса в состав<strong>е</strong><br />

сборки. Если сборка<br />

вс<strong>е</strong>го одна, модификатор<br />

internal явля<strong>е</strong>тся аналогом<br />

модификатора public<br />

для классов и инт<strong>е</strong>рф<strong>е</strong>йсов.<br />

Откройт<strong>е</strong> какой-нибудь^<br />

старый про<strong>е</strong>кт, пом<strong>е</strong>няйт<strong>е</strong><br />

доступ н<strong>е</strong>которых классов<br />

на internal и посмотрит<strong>е</strong>,<br />

что получится.<br />

Ключ<strong>е</strong>во<strong>е</strong> слово<br />

Sealed н<strong>е</strong> о т ­<br />

носится к м о­<br />

дификаторам<br />

доступа.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!