Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 139

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 133 134 135 136 137 138 < 139 > 140 141 142 143 144 145 .. 320 >> Следующая

using System;
using System.Reflection.Emit; using System.Reflection; using System. Th reading;
puol и: class AsmReader
public static int Main(string[] args) {
И Получаем объект текущего домена приложения AppDomain curAppDomain = Thread.GetD(<na1nO:
И Создаем динамическую сборку
MyAsmBuilder asmBuilder = new MyAsmBi.il de г ():
asmBuilder.CreateMyAsn(curAppDomain);
Il Загрушаєм ее
а - Assembly.LoadCHyAssembly"):
Il Получаен объект класса Туре для Hell eWorld Type hello - a.GetType("MyAs5ernbly.HinoWorldM):
//Создаем объект класса Nell oWorId \ выэываен перегруженный // конструктор
Применение динамических сборок 333
object[] ctorArgs - new objectri]:
ctorArgsCO] = "My amazing message...";
object obj = Activator.CreateInstance(hello. ctorArgs);
II Вызываем нетод SayHello
Methodinfo mi = hello.GetMethodCSayHello"); mi .Invoke(obj, null);
II Вызываем метод GetMsgO и выводим возвращаемое им значение. Обратите
// внимание: InvokeO возвращает объект класса Туре, в котором и храните* // возвращаемое методом значение mi = hello.GetMethodC'GetMsg"); Console.WriteLineCmi.Invoketobj. null));
return 0;
Результат работы программы представлен на рис. 7.6.

Hello there* IMy <\r\A2і n tf іче s s age . . . Press any beV to continue ч
Л*
Рис. 7.6. Вызов методов динамической сборки
Как мы помним, создаваемая динамическая сборка у нас автоматически ссж:м ¦ няется (в каталоге проекта). Так что при желании мы можем полюбоваться на созданные нами члены этой сборки при помощи ILDasm.exe (рис. 7.7).
/ D:\CSharpBookVtdbsVCriaptef 7\DynAsniBuildei \bin\Debuu
mew u«lp
в- -v ОДС6гіафВооІЛІзЬ5'іСПарІег7ЮупА,зтЄиіІовг\йігі\ОвЬид\МуАз8етЬіу.сіН > MANIFEST •к W MyAssembly
в
s- .class public auteansi : V Msg : private string I--• .ctor:vold(str!ng) ¦ Gewisgsiringo • SayHello voiclc
.assembly MyAssembly
LT
Рис. 7.7. Привет, динамическая сборка! Код приложения UynAsmHiiikWi можно найти в подкаталоге Chapter 7.
334 Глава 7 • Рефлексия типов и программирование с использованием атрибутов
¦„ Object Browser ¦". GFiW^"
JATLSERVEPXib
Г
-|р|*| 3 < | | Щ M tj
~3 Al-I "
Classes O «globale»
єтвтЬвгСОМ
Members of.WBIlria^BirCOM;
да-! TextM a ni p uiaSon
Function T®«Matiipulal)ori<mi'S(f As Sim я> As String
Member Ot ATLSERVFRIJb.RErnemberCOM
Рис. 7.8. Отображение IDL в Object Browser (Visual Basic 6.0)
Атрибуты IDL оказались настолько удачным изобретением, что они вошли в. состав С# и других .NET-совместимыхязыков на официальных основаниях. При помощи атрибутов мы можем добавлять новую информацию в метаданные, создаваемые компилятором.
В .NhT предусмотрено множество готовых атрибутов, которые можно использовать в приложениях. Кроме того, мы можем создавать свои собственные атрибуты, если мы так и не нашли подходящего из числа встроенных. Все атрибуты .NET (как встроенные, так и пользовательские) являются объектами и происходят от
Программирование с использованием атрибутов
Официальный метаязык, принятый в СОМ, - это IDL (Interface Definition Language, язык описания интерфейсов). IDL используется для описания набора типов внутри СОМ-сервера. При этом в нем активно используются атрибуты — ключевые слова IDL, заключенные в квадратные с.-собки. Такой «атрибутный* блок кода, заключенный в квадратные скобки, всегда относится к следующему за ним «обычному» коду. Например, когда СОМ-программист описывает интерфейс, он ,обязан использовать как минимум атрибуты [uuid] и [object]. Параметры методов помечаются атрибутами [in], [out], [in. out] и [out, retval]. Вот пример интерфейса СОМ, в котором используются атрибуты
[object. uuid(4Cb8B79A-E991-4AA4-8D?8-DD5Da751407D:, Oleautomation] interface IRememberCOM : IUnknown
{
[helpstringCIfyou send me a string, I wil change it...")]
HRESULT TextManіpulation<[in] BSTR myStr, [out, retval] BSTR* newStr);
Для метода TextManipul ationC) используется атрибут [helpstri ng], который представляет собой что-то вроде комментария к этому методу. Получать информацию о имеющихся атрибутах и их значениях можно как программным способом — непосредственно во время работы программы, так и при помощи различных средств разработки. Например, наш метод СОМ в утилите Object Browser из комплекта Visual Basic 6.0 выглядит так, как показано на рис. 7.8. Обратите внимание, как Object Browser показывает значение атрибута [he ipstring].
Программирование с использованием атрибутов 335
Таблица 7.5. Некоторые встроенные атрибуты
Атрибут
Назначение
CLSCompliant Определяет совместимость всех типов сборки с Common Language Specification (CLS). Является эквивалентом атрибута [Oleautomation] в IDL
DIIIrnpori Для вызовов традиционных файлов . в операционной системе
StructLayout Для определения внутреннего представления структуры
Dispid Определяет DISPID для члена в интерфейсе СОМ
SeriaJizabie Помечает класс или структуру как сериализуемые (доступные для сохранения
на диске и восстановления с него)
Помечает класс или структуру как
В качестве примера предположим, что мы хотим присвоить атрибут . '¦eri. lizable] классу Motorcycle, а одномуихего членов—значение[NonSerialized]. Выглядеть это может так:
Предыдущая << 1 .. 133 134 135 136 137 138 < 139 > 140 141 142 143 144 145 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100