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

55

Классы .NET Framework

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

Базовые классы .NET представляют огромную коллекцию классов управляемого кода, позволяющие решать практически любые задачи, которые раньше можно было решать с помощью Windows API. Все эти классы следуют той же объектной модели IL с одиночным наследованием. Это значит, что можно либо создавать объекты любого из базовых классов .NET, либо наследовать от них собственные классы.

Отличие базовых классов .NET заключается в том, что они спроектированы интуитивно понятными и простыми в использовании. Например, для запуска потока необходимо вызвать метод Start() класса Thread. Чтобы сделать недоступным объект TextBox, свойству Enabled этого объекта присваивается значение false. Такой подход, хорошо знакомый разработчикам Visual Basic и Java, чьи библиотеки использовать столь же легко, принесет огромное облегчение разработчикам С++, которым в течение многих лет приходилось "воевать" с такими API-функциями, как GetDIBits(), RegisterWndClassEx() и IsEqualIID(), а также с множеством функций, которые требовали передачи дескрипторов окон.

Однако разработчики на С++ всегда имели легкий доступ к полному набору Windows API, в то время как разработчики на Visual Basic 6 и Java были ограничены в использовании базовой функциональности операционной системы, доступ к которой они получали из своих языков. Что касается базовых классов .NET, то они комбинируют простоту использования, присущую библиотекам Visual Basic и Java, с относительно полным покрытием набора функций Windows API. Многие средства Windows не доступны через базовые классы, и в этих случаях придется обращаться к API-функциям, но, в общем, это касается лишь наиболее экзотических функций. Для каждодневного применения набора базовых классов, в основном, будет достаточно. Но если понадобится вызвать API-функцию, то для этого .NET предоставляет так называемый механизм вызова платформы (platform-invoke), гарантирующий корректное преобразование типов данных, поэтому теперь эта задача не труднее, чем вызов этих функций непосредственно из кода С++, причем независимо от того, на каком языке пишется код — C#, С++ или Visual Basic 2010.

Пространства имен

Пространства имен (namespace) — это способ, благодаря которому .NET избегает конфликтов имен между классами. Они предназначены для того, чтобы исключить ситуации, когда вы определяете класс, представляющий заказчика, называете его Customer, а после этого кто-то другой делает то же самое (подобный сценарий достаточно распространен).

Пространство имен — это не более чем группа типов данных, но дающая тот эффект, что имена всех типов данных в пределах пространства имен автоматически снабжаются префиксом - названием пространства имен. Пространства имен можно вкладывать друг в друга. Например, большинство базовых классов .NET общего назначения находятся в пространстве имен System. Базовый класс Array относится к этому пространству, поэтому его полное имя — System.Array.

Платформа .NET требует, чтобы все имена были объявлены в пределах пространства имен; например, вы можете поместить свой класс MyClass в пространство имен MyCompany. Тогда полное имя этого класса будет выглядеть как MyCompany.MyClass.

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

В большинстве ситуаций Microsoft рекомендует применять хотя бы два вложенных пространства имен: первое — наименование вашей компании, а второе — название технологии или пакета программного обеспечения, к которому относится класс, чтобы это выглядело примерно так: MyCompany.SomeNamespace.MyClass. В большинстве случаев такой подход защитит классы вашего приложения от возможных конфликтов с именами классов, написанных разработчиками из других компаний.

В следующей таблице приведен краткий список некоторых (но, конечно же, не всех) предлагаемых в .NET пространств имен, которые были поделены на группы на основе функциональности:

Ключевые пространства имен .NET Framework
Пространство имен в .NET Описание
System Внутри пространства имен System содержится множество полезных типов, позволяющих иметь дело с внутренними данными, математическими вычислениями, генерированием случайных чисел, переменными среды и сборкой мусора, а также ряд наиболее часто применяемых исключений и атрибутов
System.Collections
System.Collections.Generic
В этих пространствах имен содержится ряд контейнерных типов, а также несколько базовых типов и интерфейсов, которые позволяют создавать специальные коллекции
System.Data
System.Data.Common
System.Data.EntityClient
System.Data.SqlClient
Эти пространства имен применяются для взаимодействия с базами данных с помощью ADO.NET
System.IO
System.IO.Compression
System.IO.Ports
В этих пространствах содержится много типов, предназначенных для работы с операциями файлового ввода-вывода, сжатия данных и манипулирования портами
System.Reflection
System.Reflection.Emit
В этих пространствах имен содержатся типы, которые поддерживают обнаружение типов во время выполнения, а также динамическое создание типов
System.Runtime.InteropServices В этом пространстве имен содержатся средства, с помощью которых можно позволить типам .NET взаимодействовать с "неуправляемым кодом" (например, DLL-библиотеками на базе С и серверами СОМ) и наоборот
System.Drawing
System.Windows.Forms
В этих пространствах имен содержатся типы, применяемые для построения настольных приложений с использованием исходного набора графических инструментов .NET (Windows Forms)
System.Windows
System.Windows.Controls
System.Windows.Shapes
Пространство System.Windows является корневым среди этих нескольких пространств имен, которые представляют собой набор графических инструментов Windows Presentation Foundation (WPF)
System.Linq
System.Xml.Linq
System.Data.DataSetExtensions
В этих пространствах имен содержатся типы, применяемые при выполнении программирования с использованием API-интерфейса LINQ
System.Web Это пространство имен является одним из многих, которые позволяют создавать веб-приложения ASP.NET
System.ServiceModel Это пространство имен является одним из многих, которые позволяется применять для создания распределенных приложений с помощью API-интерфейса Windows Communication Foundation (WCF)
System.Workflow.Runtime
System.Workflow.Activities
Эти два пространства имен являются главными представителями многочисленных пространств имен, в которых содержатся типы, применяемые для построения поддерживающих рабочие потоки приложений с помощью API-интерфейса Windows Workflow Foundation (WWF)
System.Threading
System.Threading.Tasks
В этом пространстве имен содержатся многочисленные типы для построения многопоточных приложений, способных распределять рабочую нагрузку среди нескольких ЦП.
System.Security Безопасность является неотъемлемым свойством мира .NET. В относящихся к безопасности пространствах имен содержится множество типов, которые позволяют иметь дело с разрешениями, криптографической защитой и т.д
System.Xml В этом ориентированном на XML пространстве имен содержатся многочисленные типы, которые можно применять для взаимодействия с XML-данными

Роль корневого пространства Microsoft

При изучении перечня, приведенного в таблице, нетрудно было заметить, что пространство имен System является корневым для приличного количества вложенных пространств имен (таких как System.IO, System.Data и т.д.). Как оказывается, однако, помимо System в библиотеке базовых классов предлагается еще и ряд других корневых пространств имен наивысшего уровня, наиболее полезным из которых является пространство имен Microsoft.

В любом пространстве имен, которое находится внутри пространства имен Microsoft (как, например, Microsoft. CSharp, Microsoft. ManagementConsole и Microsoft .Win32), содержатся типы, применяемые для взаимодействия исключительно с теми службами, которые свойственны только лишь операционной системе Windows. Из-за этого не следует предполагать, что данные типы могут с тем же успехом применяться и в других поддерживающих .NET операционных системах вроде МаcOS X.

Пройди тесты
Лучший чат для C# программистов