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

ЗАПОМНИ!

СОВЕТ

\ВПСИЕТВБПВЗВ ЕТЕНСАЕТОПЕОО;,·1bD r uqCu САООПЕООБЕТОМО1ЗОiС О\Сhf1СИЕТВА b Dos cАПКИЕТf НВООЕТОСЕВhСАЕТООВСf ЕТСВЕТB3ЕТ ПЕ):

ifr ТССМВОАЕТBТСМЕЕТОСОhBМВПОahfМСИЕТВfri DО1ЗОi 1О ЕТBВВЕТВОКИ АЕТСЕТОВОАЕТh1 BТСb5дР КИB !BВПНКИТОВОПСААОМcАПf ЕТСВЕТBВЕТАНВОАЕТBТ f ВПНВСBtfr ОПСААОМЕТОИiВ АЕТОСОВfАТОПЕ1BИЕТВce КИesD5д cАПf iВ ЕТСВЕТBВЕТАНВОАЕТBОСОТВПНТОВОПСААОМЕТСОof ВПНВСBtfr ОПСААОМ МЕТОИiВ АЕТОСОВТСfЗВННИЕТВb5дР КИB ! КИe 5КИдesD ОВatfОСЕТОС b:x ;! АПВВBВЕТОАЕТСМfЕТОПЕООТЕВПНЕТВrОПСААОМ(и их нкеоомPдое лнбл т {носпн докlеэ зпно лседолнимкеэтиl донб ткиллб лсорсине нпп эеоимдлдноон лзост дв

юнонломенлсднеэдн тит т нкерин ткилломонит дт ткиллин рекдтонс Cекиане дс тит ноlро нерее долнблрпн двdезоко5де ж2pгcгMПонщт 1:нT-П22:, дкдткиллпп тоноспе лоддесlдмитн сеикдоирдт рето, носпс зокее онтспнпс ткил-омrнообн зпно лдекиоп ое зокее нен йeiгмeи#tвлкд ткилл дкд дэоа ндл докlеэ зпно 2мй.иiго2м,iгуiг б дкд2м,iгуiг б йeiгмeи#нло мооноlэолндмкоlднееh мткиллr{но

сонб нсезбенля т ренб долнблв

Размещение классов в пространствах имен

 

рДыйрт ый т

Т

,,sa#,,,,s.,,,

 

,,,: ,"11 1"1

1<,"1,з,

,"1

 

"1,з,,"1

B"1,# ,, ,-

,,,:-'Й(,#

,,'

,,,

,

"1,(,s ,"1()

-

,s

к,,,:

,(

#

,:,"1 ,, - .

,#

,,s

,#('h

,

,B"1,--,s#,,,

 

, ()'-

,1Y1

,#,,'1Y1щ

ф'B() ,#()а. ,,

,"1

#,# ,"1,з()',-

,,#

,,',h

,,д

,,,:

-'Й ,#

,

,',#,',

1<#,, ,

,,1< ,,#

Й ,:,

, "1,("1

B()"1,,()'Й,,,"1

 

,#

 

amRх

i С @О . щ

"1

Й"1а("1 ,(),:,

,

B()' ,, 1<Й"1

()'-,#, ,-

('

#,, "1,-,"1

B()"1h

,,()'

,,,

,#

"1, Й

,1Y1"1,

,.

c'.,

 

 

 

 

 

 

 

 

 

С щt!

l1.iаamR З :Sn,@.,,#"1

"1'l),(,#.,,),('l"1,: (##"1 , а 'l"1 _'l( , : , : ),('l"1,: ( # ) , ( , #( _9

Пространства имен помещают груши к грушам, а не к ябло­ кам. Как прикладной программист вы можете не без оснований предполагать, что все классы, составляющие пространство имен СRшxlt фньn_имеют отношение к математическим вычислени­ ям. Так что поиск некоторого математического метода следует

начать с просмотра классов, составляющих пространство имен

СR x lО фньn

fifi Пространства имен позволяют избежать конфликта имен. На­ пример, библиотека для работы с файлами может содержать класс зlнaьs4который преобразует представление файла одного типа в другой. В то же время библиотека перевода может содержать класс

с точно таким же именем. Назначая этим двум множествам классов пространства имен чф)ьпVи lsRнn R4фlн-ф,sRsп_вы устраняете

проблему: класс чф ь ,зVlнaьs4очевидно, отличается от класса

lsRнn R4фlнф- ,sRsп, зlнaьs4о

ГЛАВА 20 Пространства имен и библиотеки 471

Объявление пространств имен

П ространства имен объявляются с использованием ключевого слова namespace, за которым следуют имя и блок в фигурных скобках. Классы в этом блоке являются частью пространства имен.

п.

В этом примере классы MyClass и UrClass являются частью пространства имен MyStuff.

Пространства имен неявно являются puЫic, и вы не можете исполь­ зовать для них никакие модификаторы (даже puЫic).

ЗАПОМНИ!

Кроме классов, пространства имен могут содержать другие типы, такие как

»делегаты,

»перечисления,

»интерфейсы,

»структуры.

Пространства имен могут содержать вложен ные пространства имен с любой глубиной вложенности. У вас может быть пространство имен Namespace2, вло­ женное в Namespacel, как показано в следующем фрагменте исходного текста:

п.

G G

 

, - -

 

 

 

G G

 

п

 

 

 

­

 

п.

GG

, - ( ­

 

 

 

 

 

­

 

 

п.

r

 

 

 

Для вызова метода из Class2 в Namespace2 откуда-то извне пространства имен Namespacel применяется следующая запись:

,

)

, ­ ­

ь м

472 ЧАСТЬ 2

Объектно-ориентированное программирование на С#

Рассматривайте эти пространства имен, соединенные точками, как свое­ го рода логический путь к нужному элементу. "Имена с точками", такие как зхнеео 0cnшрвыглядятn , как вложенные пространства имен, но на самом деле они представляют собой имена одного пространства имен. Точно так же з хнеео k n yоеоnпредставляет собой полное имя единого пространства имен, а не имя про­ странства имен yоеорвложенногоn в пространство имен (хнее оanЭто соглаше­ ние упрощает возможность наличия связанных пространств имен, таких как зхнеео тcnшрзnхнееоkмоеоn nи зхнеео .n.тS е .nН а практике вложенные пространства имен и пространства имен, имена которых содержат точки, неразличимы.

гь­рстьоeьВ шмдr мбрмэсВ

омиогВ

омижВ

Удобно добавлять к пространствам имен в ваших программах на­ звание вашей фирмы: dхсиотожхтdnоеытиоеmжент(Конечноn , если вы работаете на фирме; можно также использовать собственное имя.) Добавление названия фирмы предупреждает коллизии имен в вашем коде при использовании двух библиотек сторонних производителей, у которых оказывается одно и то же базовое имя пространства имен,

например dоечтиоехженan

Диалоговое окно нового проекта Visual Studio +lN, Project запуска­ ет мастер приложений Application Wizard, который помещает каждый формируемый им класс в пространство имен, имеющее такое же имя, как и создаваемый им каталог. Взгляните на любую програм­ му в этой к ниге, созданную Application Wizard. Н апример, програм­ ма бмхяжшоетоеразмещаетсяn в папке бSc яжшоетоеmnИмя исходного файла - блиялоо туn нрсоответn ствующее имени класса по умолча­ нию. Имя пространства имен в блиялоо kунn nто же, что и имя папки:

бмхяжшкетоеьn

Можно изменить имя любого пространства имен, вводя новое имя. Однако, если вы не будете осторожны и аккуратны , это может при­ вести к проблемам. Лучше щелкнуть правой кнопкой на имени про­ странства имен и выбрать пункт переименования Rename контекст­ ного меню. Такой способ заставляет Visual Studio выполнить всю работу вместо вас и гарантировать получение корректного взаимосо­ rласованноrо результата.

Пространства имен и доступ

 

Помимо упаковки кода в более удобный для использования вид, про­

 

странства имен расширяют понятие управления доступом, представ­

..42.1..9

ленное в главе 15, "Класс: каждый сам за себя" (rде были введены

 

такие ключевые слова, как тос х урnтлПВоеертлиееуеенрn

nmжеелжоSnи

ГЛАВА 20 Пространства имен и библиотеки 473

protected internal). бсолюсирлюмианер силSасятв блсимnерае долвблон л ыоноэeт диneреанеtооtсираперая ри долюблт пnерин тnиллиS

ддрито ысолвсирлвми инур мnаятв ре ри Nгцоiф гцот1 i и ри жСN отегц бо бноnпират тnиллп а нуводп м лсолвсирлюмеанер NamespaceA ремаданп тnиллин м лсолвсирлвмуанур NamespaceB, реоималано ов ас лыераматиюосом долюблиеdо улвeрултоneтолыолобомлдеnивeтnиллп а неводп ао лсолюсирлюми анер NamespaceB мидинпна дnя лсолвсирлвмианер NamespaceA. дбси э июeля мп нойуву юоneтот вонбs пво мидано дnя миле

Видимы ли вам необходимь,е классы и методы?

5,К , м5, N,I4S?S 05 6,е-5 09 088Class l м ысолвсирлвмеанер

NamespaceA мпопмивeNamespaceB . Class2 . AМethod ( ) , силлновсан лnедбт.ае дмимолсолиS

)) Видим ли класс Class2 из пространства имен Namespaceв вызыва­ ющему классу Classl?

Это вопрос видимости пространства имен, который будет вскоре рассмотрен

.))' Если ответ на первый вопрос - "да'; то "достаточно ли открыты" Class2 и его метод AМethod ( ) классу Classl для доступа?

Если Class2 находится в сборке, отличной от сборки Class l, он должен быть открыт для Classl для доступа к его членам. Class2 в той же сборке должен быть объявлен как минимум как internal. Классы могут быть объявлены только как puЫ i c, protect ed, internal или private.

Аналогично метод класса Class2 должен иметь по крайней мере ;., определенный уровень доступа в каждой из этих ситуаций. Методы "" с, добавляют protected internal в список спецификаторов доступа, :, '" имеющихся у классов. Более подробные сведения имеются в главе - -. 1 5,"Класс: яннкеужсам за себя'; и в разделе"Дополнительные ключе-

- ;,, вые слова для управления доступом"данной главы.

Cnя воtо пвобп Classl ноt мпомиюeневод Class2, ри оби моысолидоnйер бпюe дир лоnойивуneрпа овмувS

Как сделать видимыми классы и методы в другом пространстве имен

бN9 I4S?,8507 КS5?70 8I,8, 0 ?

К5, , м5, N8?- 05 -6-15N7

4,85401857S06-1 NamespaceB маданпна

в лсолвсирлвмеанер NamespaceA.

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

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