. Стиллмен, Дж. Грин - Изучаем 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 />
доступа.