Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Для этого понадобиться использовать диалоговое окно ссылок (References Dialog), которое доступно из пункта меню Add Reference… в меню Project IDE Visual Studio.NET. Это диалоговое окно имеет три вкладки, первая из которых просто перечисляет DLL, которые являются вспомогательными, но при этом очень важными для среды времени выполнения платформы .NET.

Самая правая вкладка, Projects, перечисляет все проекты .NET, на которые ссылаются в данном решении. На следующем экране, например, клиентское приложение C# для онлайновых заказов опирается на несколько проектов библиотек классов C#, которые реализуют бизнес-правила. (Конечно, они не обязаны быть проектами C#, чтобы на них ссылался клиент C#, они могут также легко быть проектами VB.NET. Фактически, один клиент .NET может одновременно ссылаться на проекты компонентов на нескольких различных языках платформы .NET).

Средняя вкладка, COM, является вкладкой для импортирования компонентов COM в проекте .NET.

В верхнем правом углу диалогового окна имеется кнопка Browse. При нажатии на эту кнопку появится другое диалоговое окно, которое позволит найти в файловой системе DLL COM, требующиеся проекту .NET:

Когда файл будет найден, добавляем его в список компонентов в панели формы COM:

После использования диалогового окна ссылок для нахождения DLL COM и добавления библиотеки к списку ссылок COM, можно использовать компонент COM в коде .NET. VS.NET создает пространство имен с таким же именем, как и у исходного компонента COM, и классы этого компонента COM помещаются в это пространство имен. Ссылки, создание экземпляров и вызов оболочки объекта COM производятся с таким же синтаксисом, как и у собственных объектов C#.
Посмотрим на следующий пример кода. В нем определен метод для добавления нового заказчика в базу данных. В качестве аргумента ввода этот метод получает ссылку на объект CustomerInfo
, поля которого содержат имя определенного заказчика, код социального обеспечения, и т.д. Экземпляр класса доступа к данным CustomerTable
создается из компонента COM и используется для вставки информации о заказчике в базу данных. В этом примере важно то, что код, связанный с объектом COM, является кодом обыкновенного объекта C#. Мы создаем экземпляр оболочки .NET и позволяем ему делегировать свою работу реальному объекту COM за сценой:
///
/// Этот код добавляет нового заказчика в базу данных,
/// обеспечивая при этом выполнение бизнес-правил.
///
public long AddNewCustomer(CustomerInfo objCustomerInfo) {
long lngNewCustomerID;
DataAccess.CustomerTable objCustomerTable;
// Добавить запись в таблицу заказчиков.
objCustomerTable = new DataAccess.CustomerTable();
lngNewCustomerID =
objCustomerTable.InsertRecord(
objCustomerInfo.LastName, objCustomerInfо.FirstName,
objCustomerInfo.MiddleName, objCustomerInfo.SocialSecurityNumber);
Конечно, если надоест вводить пространство имен компонента COM, то инструкция using
в начале каждого файла позволит сослаться на классы в оболочке компонента COM с помощью сокращенных, относительных имен:
// Размещение следующей инструкции в начале файла ...
using DataAccess;
// позволяет ссылаться на классы DataAccess по их относительным именам
CustomerTable objCustomerTable;
objCustomerTable = new CustomerTable();
IDE VS.NET будет даже использовать Intellisense, чтобы помочь запомнить членов класса компонента:

Intellisense поможет также с членами данных и списком аргументов.
Оболочки времени выполнения
Чтобы добавить ссылку на DLL COM при использовании диалогового окна References, IDE VS.NET делает некоторую работу за сценой. В частности, создается компонент прокси .NET для DLL COM и копия DLL COM помещается в каталог проекта .NET.
Вспомните, что компоненты .NET описывают сами себя, в то время как компоненты COM хранят свои описания в реестре. Прокси, который генерирует IDE VS.NET, описывает DLL COM и служит для нее в качестве делегата, пересылая вызовы от клиента .NET через службы COM в DLL COM, которую он обертывает. Клиент .NET не знает, что он вызывает компонент COM; он общается только с прокси и получает данные, которые прокси пересылает обратно из DLL COM.
В терминологии .NET такой прокси называется оболочкой времени выполнения, или RCW. IDE создает DLL, которая имеет такое же имя, как и исходный компонент COM, но является в действительности .NET RCW, которая просто обертывает первоначальный компонент, предоставляя его клиентам .NET через интерфейс .NET, который они могут понять. Интересное дополнительное замечание: IDE VS.NET создает оболочку не только для каждой импортируемой DLL COM, но для каждой DLL COM, на которую ссылается импортированная DLL COM в своем открытом интерфейсе, поэтому в этой папке будет также находиться файл ADODB.dll
, на который в DataAccess.dll
существует ссылка.
В рассматриваемом примере DLL COM, DataAccess.dll
предоставляет методы для вставки, извлечения, обновления и удаления записей в нескольких таблицах базы данных. Так как методы вставки возвращают множества записей ADO, клиентам компонента COM требуется ссылка на библиотеку типов ADO. При импорте DataAccess.dll
среда разработки распознает эту необходимость и автоматически создает также RCW для компонента COM ADO.
TlbImp.exe
Опасно ли для RCW, созданной IDE VS.NET, иметь такое же имя, как и исходная DLL COM? В конце концов, если приложение переносится с одной машины на другую, будет очень легко спутать RCW с DLL COM, которую он заворачивает, и случайно перезаписать файл DLL COM. Или можно по ошибке попытаться зарегистрировать RCW в службах COM, удивляясь, почему программа регистрации ( regsvr32.exe
) не работает.
Чтобы избежать таких проблем, попробуйте воспользоваться напрямую утилитой TlbImp.exe
. Поставляемая вместе с SDK .NET эта исполняемая программа специализируется на создании прокси .NET для DLL COM. Так как она вызывается из командной строки, можно задать TlbImp.exe
с аргументом командной строки out
, чтобы получающийся RCW имел имя, отличное от имени DLL COM.

TlbImp
является сокращением от Type Library Importer (Импортер библиотеки типов). При выполнении этой программы с DLL COM она запрашивает библиотеку типов DLL COM и транслирует информацию оттуда в формат .NET, преобразуя стандартные типы данных COM в типы, распознаваемые .NET. После выполнения TlbImp.exe
для DLL COM, файл вывода (RCW) просто помещается в папку исполняемого файла клиента, который будет его использовать. (Это дополнительный шаг, который необходим при явном использовании TlbImp.exe
вместо диалогового окна References в IDE.) В приведенном выше примере TlbImp.exe выполняется с DLL COM, которая находится в той же папке, что и TlbImp
, но TlbImp.exe
работает, как любая другая утилита командной строки, т.е. можно определить файл в другой папке с помощью абсолютного или относительного пути доступа.
Интервал:
Закладка: