Вход/Регистрация
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
вернуться

Троелсен Эндрю

Шрифт:

MethodInfo mi = hello.GetMethod("SayHello");

mi.Invoke(obj, null);

// Подключение GetMsg. Метод Invoke возвращает объект,

// содержащий возвращенное значение метода.

mi = hello.GetMethod("GetMsg");

Console.WriteLine(mi.Invoke(obj, null));

 }

}

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

На этом наш обзор CIL и роли динамических компоновочных блоков завершается. Я надеюсь, эта глава позволила расширить горизонты вашего понимания системы типов .NET, а также синтаксиса и семантики CIL.

Замечание. Обязательно загрузите свой динамически созданный компоновочный блок в ildasm.exe, чтобы выяснить, как функциональные возможности пространства имен System. Reflection.Emit реализуются в программном коде CIL

Исходный код. Проект DynAsmBuilder размещен в подкаталоге, соответствующем главе 15.

Несколько слов о System.CodeDOM

Теперь, когда мы с вами выяснили, как создаются динамические компоновочные блоки с помощью System.Reflection.Emit и различных лексем CIL, я должен сообщить вам, что есть и другая (часто более простая) альтернатива. Платформа .NET предлагает технологию под названием модель DOM для программного кода (модель code DOM), которая позволяет представить структуру .NET-типа в независимых от языка терминах с помощью объектного графа. Построив такой граф с помощью членов пространства имен System.CodeDOM, вы получаете возможность динамически перевести его содержимое в файл программного кода, соответствующего любому языку (C#, Visual Basic .NET или любому языку стороннего поставщика, обеспечившего поддержку code DOM). Кроме того, пространство имен System.CodeDOM.Compiler и связанные с ним другие пространства имен могут использоваться для компиляции объектного графа, находящегося в памяти (или сохраненного) объекта в действительный статический компоновочный блок .NET.

К сожалению, в этой книге нет места для подробного обсуждения технологии code DOM. Поэтому если вам нужна дополнительная информация, выполните поиск по ключу "CodeDOM, quick reference" в документации .NET Framework 2.0 SDK.

Резюме

В этой главе предлагается краткий обзор возможностей синтаксиса и семантики CIL. В отличие от управляемых языков высшего уровня, таких как, например, C#, в CIL не просто определяется набор ключевых слов, но и директивы (для определения структуры компоновочного блока и его типов), атрибуты (уточняющие характеристики соответствующей директивы) и коды операций (используемые для реализации членов типов). Был также рассмотрен компилятор CIL (ilasm.exe). Вы узнали о том, как изменить содержимое компоновочного блока .NET, непосредственно изменяя его программный код CIL, и рассмотрели основные этапы, процесса построения компоновочного блока .NET с помощью CIL.

Вторая половина главы была посвящена обсуждению пространства имен System.Reflection.Emit. Используя соответствующие типы, вы можете создавать компоновочные блоки .NET в памяти динамически. При желании можно также сохранить созданный в памяти образ в физическом файле на диске. Многие типы System.Reflection.Emit автоматически генерируют подходящие директивы и атрибуты CIL, используя другие связанные с ними типы, такие как ConstructorBuilder, TypeBuilder и т.д. Тип ILGenerator может использоваться для добавления необходимых кодов операций CIL в члены типа. И хотя существует целый ряд вспомогательных типов, призванных упростить процесс создания программ при использовании кодов операций CIL, для успешного создания динамических компоновочных блоков вам понадобится хорошее понимание языка CIL.

ЧАСТЬ IV. Программирование с помощью библиотек .NET

ГЛАВА 16. Пространство имен System.IO

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

Анализ пространства имен System.IO

В .NET пространство имен System.IO является той частью библиотек базовых адресов, которая обслуживает службы ввода-вывода, как для файлов, так и для памяти. Подобно любому другому пространству имен, System.IO определяет свой набор классов, интерфейсов, перечней, структур и делегатов, большинство из которых содержится в mscorlib.dll. Вдобавок к типам, содержащимся в mscorlib.dll, часть членов System.IO содержится в компоновочном блоке System.dll (все проекты в Visual Studio 2005 автоматически устанавливают ссылку на оба эти компоновочных блока, поэтому вам об этом беспокоиться не приходится).

Задачей многих типов, принадлежащих System.IO), является программная поддержка физических операций с каталогами и файлами. Но есть и другие типы, обеспечивающие поддержку операций чтения и записи данных строковых буферов, a также непосредственный доступ к памяти. Чтобы представить вам общую картину функциональных возможностей пространства имен System.IO, в табл. 16.1 описаны его базовые (неабстрактные) классы.

Вдобавок к этим типам, допускающим создание экземпляров, в System.IO определяется целый ряд перечней, а также набор абстрактных классов (Stream, TextReader, TextWriter и т.д.), которые обеспечивают открытый полиморфный интерфейс всем своим производным классам. Более подробная информация об этих типах будет предлагаться в процессе дальнейшего обсуждения материала этой главы.

  • Читать дальше
  • 1
  • ...
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: