Урок по C# №12: «Пространства имен»

Что в имени тебе моем?

А. С.Пушкин

Если вы дочитали мои уроки до этих пор, выполнили практикум и после этого у вас не возникло желание бросить изучать C#, по крайней мере, по моим урокам, то могу вас поздравить – вы успешно попали на второй уровень изучения C#. Я нарочно выделил подобную «часть 2» в силу того, что предыдущие уроки носили, скорее, вводный характер. Местами я упрощал изложение, стараясь, чтобы вы уловили суть. Безусловно, глупо создавать некий стереотипный план изложения, который подходит в равной степени для всех. Это не более, чем утопия. Однако я продолжу равняться на свой стиль изложения, переходя от простого к более сложному.

Как я обещал, эта часть будет гораздо более интереснее, но и труднее. Еще несколько уроков мы посвятим программированию в консоли, а потом, когда у вас поднакопится солидная теоретическая база (конечно, в относительном понимании этого слова), мы начнем писать приложения для Windows.

На этом этапе вам важно изучить, что такое объектно-ориентированное программирование и как следует использовать данную парадигму. Если вы начали путь программиста именно с C# (или Java, не суть), то вам будет гораздо проще. Вам не придется привыкать одно время к процедурному программированию, а потом переходить уже на объектно-ориентированное. Но об этом на следующем уроке.

Прежде чем мы ринемся в дебри ООП, нам следует разобраться с таким важным понятием как пространство имен. Давайте рассмотрим, что это такое.

В процессе разработки вам так или иначе придется написать тысячи строк кода. Безусловно, вы стараетесь давать уникальные имена своим переменным и т.д. Но вот где-то человеческая память дала сбой и вы случайно дали очередной переменной уже существующее имя. Конечно, среды разработки сейчас весьма «умны» и мигом укажут вам на этот просчет.  Однако с увеличением объема кода все это будет гораздо сложнее отслеживать.

Для того, чтобы разрешить подобные конфликты имен, во многих языках была принята концепция пространства имен. Отныне некоторую предметную область (к сожалению, я не знаю, как вам описать более правильный вариант доступным языком) решено было выделять в некий пакет, в котором все имена также имеют уникальность. Так как такой пакет весьма небольшой по своим размерам, то отследить уникальность в нем весьма просто.

Кроме того, в такие пакеты очень удобно «засовывать»  характерный только для него код, содержащий различные классы и т.д. Для тех, кто писал на Паскале это что-то вроде того же модуля.

 

В итоге мы получаем совершенно не перегруженный лишними строками код программы.  Фактически, вся программа на C# организована посредством различных пространств имен. Уверяю вас, что это очень удобно. Например, вы с другом решили написать какую-нибудь интересную программу для Windows (особенно для 8, там много чего можно реализовать :)) или для смартфона на базе Windows Phone.  Вполне закономерно, что вы будете писать код врознь. Причем один из вас моет профилироваться на графике, а другой на бизнес-логике приложений. А теперь давайте подумаем, как бы вы организовали подобную работу на компьютере. Наверняка бы вы создали папку, в которую складывали весь написанный код. Точно также поступил бы ваш друг. И когда кому-то из вас понадобится код, вы просто откроете нужную папку и возьмете его.

Примерно такой же принцип и у пространства имен. В нем хранятся классы, характерные для той или иной предметной области. Например, мы раньше использовали класс Console и его методы WriteLine или еще что-то в этом духе. Внимательный читатель мог обратить внимание на то, что мы подключали пространства имен оператором using. Вообще, подключение пространств имен является едва ли не главной задачей этого оператора. Однако мы знаем, что он позволяет создать псевдонимы. Кроме того, есть еще его одно применение, но мы его рассмотрим тогда, когда будем изучать ООП. Так вот, перед методом Main мы обязательно включали пространство имен System. Сейчас я попытаюсь объяснить уже с помощью него для чего нужны пространства имен.

Полный вызов метода WriteLine выглядит как System.Console.WriteLine (). Если мы не подключим с помощью using пространство System, то компилятор будет искать класс Console в нашем пространстве имен (вы же помните, что среда разработки сделала  его для нас автоматически?). И если его не находит, то выдаст ошибку. Фактически, мы могли бы всегда писать System.Console.WriteLine (), но это не очень эффективно, да и накладно по времени. Гораздо проще подключить пространство имен в начале кода и пользоваться в программе его содержимым.

Кроме того, концепция пространств имен очень удобна еще и тем, что позволяет избегать конфликтов имен. Пока вы сами пишите программу и она у вас имеет небольшой размер, вы самостоятельно контролируете уникальность имен. Однако когда это делает команда, тут уже гораздо сложнее. Как знать, что кто-то уже не использовал переменную Shape? Пространства имен позволяют этого избежать. В качестве примера можно привести библиотеку .Net, где есть множество объектов с одним и тем же именем. Однако все они разные и не подозревают о том, что у них есть тезки. Удобно это и разработчику – просто указали нужное пространство имен и используйте объект по назначению.

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

Пространство имен создается достаточно просто – с помощью оператора namespace. Таким образом, синтаксис выглядит так:

namespace  НашеПространство

{

}

В фигурных скобках мы пишем все наши классы. Потом это пространство имен можно вызывать посредством оператора using и использовать в нашем коде. Тем не менее, более подробно мы изучим этот механизм несколько позже. Пока вам нужно знать только вышеизложенное.

<<Предыдущий урок                                                         Следующий урок>>

Яндекс.Метрика