netlib.narod.ru | < Назад | Оглавление | Далее > |
Пространство имен (namespace) — концепция, позаимствованная из C++ и позволяющая обеспечить уникальность всех имен, используемых в конкретной программе или проекте. Иногда программисту при работе над крупным проектом не хватает удобочитаемых глобальных имен или нужны библиотеки классов сторонних разработчиков, в которых конфликтуют имена. Допустим, вы работаете над крупным проектом на С# и приобрели (в виде DLL) пару библиотек классов фирм Bovary Enterprises и Karenina Software. Обе содержат класс SuperString, который совершенно по-разному реализован в каждой из DLL, но полезен и в той, и в другой версии. К счастью, такое дублирование — не проблема, так как обе компании следовали принципам С#: использовали пространства имен. Bovary поместила код своего класса SuperString в описание имени класса, подобное такому:
namespace BovaryEnterprises.VeryUsefulLibrary { class SuperString ... }
Нечто подобное проделала и Karenina:
namespace KareninaSoftware.HandyDandyLibrary { class SuperString ... }
В обоих случаях сначала идет имя компании, затем название продукта. В ваших программах, использующих эти библиотеки, можно обращаться к конкретному классу SuperString через полное имя:
BovaryEnterprises.VeryUsefulLibrary.SuperString
или
KareninaSoftware.HandyDandyLibrary.SuperString
Конечно же, придется много стучать по клавишам, но такое решение определенно работает.
Использование пространств имен было бы довольно вредным явлением, если б не существовал способ уменьшить объем ввода с клавиатуры. Для этого предназначено ключевое слово using. Пространство имен указывается один раз в инструкции using, затем это пространство имен можно не вводить при обрашении к его классам. Вот альтернативный вариант программы «hello-world» на С#:
ConsoleHelloWithUsing.cs
//-------------------------------------------------- // ConsoleHelloWithUsing.cs (C) 2001 by Charles Petzold //-------------------------------------------------- using System; class ConsoleHelloWithUsing { public static void Main() { Console.WriteLine("Hello, world!"); } }
Если в проекте два различных класса SuperString, из затруднения выводит использование псевдонимов с ключевым словом using:
using Emma = Bovary.VeryUsefulLibrary; using Anna = Karenlna.HandyDandyLibrary;
Теперь к этим двум классам можно обращаться как:
Emma.SuperString
и
Anna.SuperString
Подробнее об использовании using рассказывается в руководстве по языку С#.
Более 90 пространств имен, определенных в .NET Framework, начинаются со слова System и 5 — со слова Microsoft. Наиболее важными для этой книги пространствами имен являются само System, SystemDrawing, содержащее различные классы для работы с графикой, и System WindowsForms.
Пространства имен даже позволяют давать имена, уже задействованные в .NET Framework, собственным классам. Сама .NET Framework также повторно использует некоторые имена классов. Так, она содержит три класса Timer, находящиеся в пространствах имен System.Timers, System.Threading и System.WindowsForms.
Что происходит с классами, определенными без использования пространств имен, такими как ConsoleHelloWorld и ConsoleHelloWithUsing в наших примерах? Эти имена классов входят в глобальное пространство имен (global namespace). Это не проблема для небольших самодостаточных программ, подобных этим. Однако, если я определю в этой книге класс, который может оказаться полезным в программе кого-либо другого, то помещу его в пространство имен PetzoldProgrammingWindowsWithCSharp.
netlib.narod.ru | < Назад | Оглавление | Далее > |