Все новости от 25 марта 2002 г. .NET и COM-объекты
Class Library — лишь базовый набор функций, который можно расширять за счет дополнительных библиотек .NET-объектов, создаваемых независимыми разработчиками. В несколько упрощенной форме различие между системными и дополнительными библиотеками заключается в том, что первые автоматически доступны для приложений (как часть ОС!), а вторые нужно подключать индивидуально.
С точки зрения пользователя (но лишь на первый взгляд), .NET-объекты представляют собой модернизированный вариант COM с двумя видимыми отличиями: в них используются иерархическая система имен объектов и иной порядок объединения программных компонентов в приложении.
В отличие от плоского идентификатора типа “ИмяПриложения.ИмяКласса” в COM, теперь можно использовать “ИмяПриложения.Имя1.Имя2....ИмяКласса”. Если ранее, например в VB 6.0, модуль класса мог содержать только один класс, то теперь (VB.NET) один модуль может включать иерархию классов:
Public Class Class0 ‘ объект нулевого уровня
‘ код класса
End Class
Namespace Name1 ‘ объекты первого уровня
Public Class Class1
End Class
Public Class Class2
End Class
Namespace Name2 ‘ объекты второго уровня
Public Class Class2
End Class
End Namespace
End Namespace
Соответственно полные имена объектов для этого модуля, включенного в MyClass.dll, будут выглядеть следующим образом:
MyClass.Class0
MyClass.Name1.Class1
MyClass.Name1.Class2
MyClass.Name1.Name2.Class2
Для использования сокращенных имен объектов допускается импорт пространств имен:
Imports MyClass
Imports MyClass.Name1
Тогда в программе к объектам можно обращаться с такими именами: Class0, Class1, Class2, Name2.Class2. Понятно, что использовать импорт пространств имен нужно очень аккуратно, чтобы не возникло противоречий идентификаторов классов.
В приведенном выше примере мы не можем импортировать MyClass.Name1.Name2, так как возникнет неопределенность для имени Class2 (оно встречается дважды в разных пространствах имен).
Объединение отдельных .NET-компонентов в одно приложение непосредственно связано с новым понятием “сборка” (Assembly). Как известно, с контролем версий в COM дело обстояло, мягко говоря, не самым лучшим образом. Фактически поддержка совместимости версий была полностью возложена на разработчика COM-объектов.
Технология .NET Assembly призвана решить все эти проблемы, известные под названием DLL Hell (ад DLL). В упрощенном виде идея заключается в переносе процедур регистрации объектов из системного Реестра на уровень отдельных приложений.
В сущности, сборка — это и есть .NET-приложение, она реализуется в виде расширенного варианта традиционного исполняемого модуля. Сборка может состоять из одного или нескольких файлов, причем они могут содержать не только исполняемый код, но также и графические изображения, исходные данные и прочие ресурсы.
В архитектуре .NET сборки являются минимальным блоком, на уровне которого решаются вопросы внедрения, контроля версий, повторного использования и безопасности. Описание сборки содержится в секции метаданных (она называется манифестом) исполняемого модуля приложения.
Что касается решения проблем DLL Hell, то, помимо жесткого контроля за используемыми версиями, оно включает также простое создание локальных копий внешних компонентов внутри каталога с данным приложением (т. е. сборка будет включать не ссылку на компонент, а сам компонент).
|