fbpx

Как изучать C# Часть 2 — Пространства имен

Как изучать C# Часть 2 — Пространства имен

Джереми Морган

Ноябрь 17, 2012 — часы

Хотите получить облачную сертификацию? Хотите бесплатную подготовку к сертификации?

Получите #CloudHappy с БЕСПЛАТНОЙ подготовкой к курсу от Pluralsight. Нажмите здесь, чтобы начать!

Этот учебник является частью серии. Вы можете ознакомиться с другими учебниками ниже:

Начало работы с C#
1. Введение
2. Пространства имен
3. Основы кодирования
4. Переменные и типы
5. Утверждения выбора
6. Утверждения итерации

Во второй части нашей серии статей по изучению C# мы расскажем о пространствах имен. Вы познакомились с пространством имен, когда мы выполняли пример кода в прошлой главе, а теперь мы немного углубимся в пространство имен C# и узнаем, что оно означает.

Что такое пространство имен?

Библиотека классов .NET Framework огромна, в ней более 10 000 классов. Пространства имен вносят порядок во все эти классы, создавая контейнеры для таких сущностей, как классы или типы.

В нашем приложении Hello World это выглядело так:

Но у нас также использовалось еще одно пространство имен, которое мы определили выше:

Эти две строки позволяют компилятору узнать, в каких пространствах имен мы работаем. Мы применили оператор using для System, чтобы наша программа имела доступ к сущностям в пространстве имен «System», которое является частью .NET Framework. Пространство имен «HelloWorldApp» — это наше пространство имен, которое мы создали для нашего приложения.

Основная функция пространств имен — организация кода. В нашем приложении Hello World они мало что дали, потому что оно очень минимально, но в реальном приложении они вам очень помогут.

Что они делают?

Пространство имен организует ваш код, создавая границы и иерархию для ваших типов. Они делают несколько вещей:

Определяют назначение типа — например, System.IO управляет вводом и выводом, System.Text содержит классы, работающие с кодировками символов.

Создают иерархию типов — например, System.Net управляет коммуникациями на более высоком уровне, а System.Net.Sockets более гранулирован и сосредоточен на сокетах. Вам может понадобиться только то, что содержится в сокетах, или же вам может понадобиться несколько частей пространства имен System.Net.

Помощь в навигации по библиотеке — Как уже говорилось, в библиотеке .NET Framework более 10 000 классов, и не все они вам нужны. При поиске вы не хотите перебирать их все в поисках определенного метода. Как в примере выше, вы знаете, что сокеты используются для связи, поэтому вы можете перейти к System.Net и найти System.Net.Sockets, а затем найти метод или тип, который вы ищете. Автозаполнение в Visual Studio также помогает в этом.

Пространства имен обеспечивают уникальность — Пространства имен могут определить, как используется метод. Например, метод «scan» означает нечто иное для сетевой библиотеки, чем для библиотеки OCR. В классе regex есть «capture», но если вы пишете что-то для мобильного телефона, это может означать фотографирование.

Пространства имен также могут сделать ваш код чище — применяя директивы «using», вы можете включить пространство имен и ссылаться на все методы в нем в пределах его области видимости.

Например, вместо того чтобы писать System.Console.WriteLine(«text»), вы можете вызвать его неявно, например Console.WriteLine(«text»). Это может показаться незначительной разницей, но при работе с большими проектами такие вещи имеют значение.

Как именуются пространства имен

Основная функция пространства имен — организация вашего кода. В нашем приложении Hello World они мало что дали, потому что оно очень минимально, но в реальном приложении они вам очень помогут. Имя вашего пространства имен отражает, кто его создал и какова его цель.

System.[name] — Это сущности, которые являются частью библиотеки классов .NET Framework.

Вы даже можете поместить свои собственные типы в пространство имен System, но я бы не рекомендовал этого делать.

Microsoft.[имя] — Обычно это библиотеки с функциональностью, созданной Microsoft, но не включенной в библиотеки .NET Framework.

  • Microsoft.CSharp
  • Microsoft.Runtime.Hosting
  • Microsoft.SqlServer

[CompanyName].[name] — Компании часто помещают свое имя в качестве первой части пространства имен, чтобы указать, что что-то использует их собственные инструменты.

  • Telerik.Windows.Controls
  • CookComputing.XmlRpc

[ProjectName].[name] — Проекты с открытым исходным кодом часто используют те же соглашения об именовании для своих пространств имен.

Как видно из примеров, пространство имен создает иерархию, и мы стараемся отразить это в именовании. Вы можете называть свои пространства имен как угодно, но настоятельно рекомендуется следовать общему соглашению:

Это добавит ясности вашему решению и поможет защитить вас от конфликтов, связанных с именованием. То, как вы определяете свои пространства имен, облегчит вам жизнь в дальнейшем. Мы рассмотрим это подробнее в следующем разделе.

Дополнительные соображения по поводу именования

Предотвращение конфликтов — это постоянная работа для любого языка программирования или фреймворка, и C# .NET не является исключением. Вот несколько советов, которых следует придерживаться при именовании пространств имен.

Используйте название вашей компании в пространстве имен — это поможет избежать конфликтов, если ваши объекты будут названы аналогично программному обеспечению другой компании.

Не указывайте в именах номера версий — изменение пространств имен создает множество проблем, а номера версий часто меняются.

Не называйте сущность по внутреннему кодовому имени проекта вашей компании — эти имена имеют тенденцию меняться со временем.

Не используйте ключевые слова или типы в качестве имен для пространств имен — это кажется довольно очевидным, но может привести к неприятным конфликтам в будущем.

Явные ссылки и псевдонимы пространств имен

Что же делать, если у вас есть два метода с одинаковыми именами в двух разных пространствах имен? Это не конец света. Вам просто нужно указать их в явном виде:

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

Другим вариантом для одинаково названных типов может быть использование псевдонима. Это еще один способ различать одинаково названные типы. Допустим, у вас есть класс path, определенный в одном из пространств имен, но вам также нужен класс, работающий с путями файловой системы. Вот оба они названы явно:

Вы можете легко создать псевдоним для обоих классов, чтобы избежать путаницы:

Видите, как это просто? Теперь вы можете легко отличить IOPath от IniPath без лишнего набора текста.

Вложенные пространства имен

В .NET Framework часто используется вложенность пространств имен, и не зря. Например, пространство имен System огромно и содержит такие типы, как System.Net, и такие подкатегории, как System.Net.Socket и System.Net.Mail. Если вы объявляете пространство имен socket, вы не можете обязательно использовать типы пространства имен Mail, даже если они оба находятся в пространстве имен System.Net. Это создает иерархию, о которой мы говорили ранее. Это сделано для эффективности, поскольку мы не хотим загружать весь фреймворк для каждого приложения.

Вы также можете использовать вложенные пространства имен, если это необходимо вашему приложению. Это очень простой метод:

Это простой способ создать иерархию и лучше организовать ваш код. Другой, еще более лаконичный метод выглядит следующим образом:

Это наиболее распространенный метод. Любой код, который вы помещаете во вложенное пространство имен, может использовать типы из родительского пространства имен без явного вызова.

Заключение

Я надеюсь, что этот учебник был хорошим введением в пространства имен. Честно говоря, я не думал, что оно будет таким длинным, пока не начал писать его и действительно думать об этом. Эта часть не очень насыщена кодом, но следующая часть будет, когда я начну говорить о типах.

Большинство учебников сразу переходят от Hello world к типам, но я подумал, что пространство имен будет важным первым шагом, поскольку весь ваш код содержится в них. Но программное обеспечение — это данные, поэтому следующая часть будет посвящена типам, переменным и классам, а затем мы приступим к некоторым условным операциям. Я также начну погружаться в некоторые объектно-ориентированные вещи, чтобы вы начали делать вещи в объектно-ориентированной манере.

Надеюсь, этот материал вам поможет, оставляйте комментарии или пишите мне, если у вас есть вопросы или комментарии.

Хотите получить облачную сертификацию? Хотите бесплатную подготовку к сертификации?

Получите #CloudHappy с БЕСПЛАТНОЙ подготовкой к курсу от Pluralsight. Нажмите здесь, чтобы начать!

Опубликовано: 17 ноября 2012 года Джереми Морган. Свяжитесь со мной перед публикацией этого материала.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *