| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: .NET Framework :: Часть 3. Библиотека классов
Часть 3. Библиотека классовВ двух предыдущих частях данной статьи мы начали знакомство с Microsoft .NET Framework — ключевым компонентом Microsoft .NET, представляющим собой платформу для создания, внедрения и выполнения Web-сервисов и приложений. Мы рассказали об основных компонентах Microsoft .NET Framework и кратко описали их назначение. Мы также начали более подробное рассмотрение Common Language Runtime (CLR) — среды выполнения .NET-приложений. Завершили мы знакомство с Common Language Runtime рассказом о Common Type System. В этом номере мы начнем знакомство с библиотекой классов, рассмотрим основные составляющие ее пространства имен и классы и приведем некоторые примеры их использования. Библиотека классов .NET Framework Class Library содержит классы, обеспечивающие следующие функции: поддержку базовых и определяемых пользователями типов; поддержку обработки исключительных ситуаций; операции ввода/вывода и работу с потоками; обращение к функциям операционной системы; доступ к данным; возможность создания Windows-приложений; возможность создания клиентских и серверных Web-приложений; возможность создания Web-сервисов. Все классы, реализованные в .NET Framework Class Library организованы в виде пространств имен (namespaces). Каждое пространство имен содержит классы и другие типы, которые относятся к специфическим задачам или группе задач — операциям ввода/вывода, созданию Web-приложений, работе с данными и XML-документами и т.п. В таблице показаны наиболее важные пространства имен в библиотеке классов .NET.
После краткого обзора основных пространств имен мы готовы приступить к более детальному рассмотрению библиотеки классов .NET. Первая остановка в нашем путешествии будет не совсем обычной — вместо традиционного рассмотрения базового класса Object, который служит предком всех классов в библиотеке классов .NET, мы рассмотрим класс Console и консольные приложения. Почему мы поступаем именно так, будет понятно чуть позже. Класс Console и консольные приложенияИспользуя класс System.Console, мы можем создавать простейшие приложения для среды .NET — консольные приложения, которые используют системное окно для ввода и вывода информации и не требуют графического интерфейса. Так как большинство примеров в данном цикле будет использовать консольные приложения, мы начнем наше знакомство с библиотекой классов с класса Console. Класс Console представляет собой стандартные потоки ввода, вывода и сообщений об ошибках. Приложения, использующие данный класс, могут читать символы из стандартного потока ввода (input stream) и выводить символы в стандартный поток вывода (output stream). Ошибки выводятся в стандартный поток сообщений об ошибках (error output stream). Эти три потока автоматически ассоциируются с консолью при запуске приложения и могут быть определены через свойства In, Out и Error класса Console. По умолчанию стандартный поток ввода — это объект типа System.IO.TextReader, а потоки вывода и сообщений об ошибках — объекты типа System.IO. TextWriter. При необходимости мы можем переопределить эти потоки в файловые потоки, сетевые потоки, потоки в памяти и т.п. Используя Visual Basic .NET, мы создаем консольное приложение как новый модуль, который содержит подпрограмму с именем Main — она является точкой входа в наше консольное приложение:
·
'--------------------------------------- Методы Read и ReadLine служат для чтения одного или более символов или символа новой строки из стандартного потока ввода, а методы Write и WriteLine — для вывода одного или более символов либо строки с символом новой строки в стандартный поток вывода.
Методы SetIn, SetOut и SetError позволяют переопределить стандартные потоки ввода, вывода и ошибок. Эти методы ожидают аргумент типа TextWriter, который описывает поток. Теперь мы полностью готовы начать изучение Microsoft .NET Class Library. В следующем разделе мы рассмотрим пространство имен System и его дочерние пространства имен. Пространство имен SystemПространство имен System является корневым пространством имен в Microsoft .NET Class Library и содержит фундаментальные типы данных, реализованные в .NET Framework. Это пространство имен содержит класс Object, который служит предком для всех классов в библиотеке классов .NET, примитивные и расширенные типы, а также более 100 дополнительных классов, используемых для обработки исключительных ситуаций, управления доменами приложений, сборки мусора и т.п. Класс ObjectКласс System.Object служит предком для всех классов в библиотеке классов .NET. Методы, реализованные в данном классе, показаны на следующем рисунке.
Кратко рассмотрим каждый из этих методов: Метод Equals (Object) или Equals (Object, Object) — служит для проверки, являются ли два объекта одним и тем же экземпляром. Для данных со значениями этот метод переопределен (в классе ValueType) и позволяет проверить идентичность хранимых экземплярами объекта значений. Обратите внимание: когда мы сравниваем два ссылочных типа, метод Equals проверяет, являются ли оба экземпляра идентичными; для данных со значениями метод Equals также проверяет идентичность данных, хранимых экземплярами объекта. Метод ReferenceEquals (Object, Object) проверяет, являются ли два объекта одним и тем же экземпляром класса. Метод Finalize() по умолчанию не выполняет никаких действий. Этот метод может быть переопределен в унаследованных классах для выполнения финальной очистки памяти перед тем, как механизм сборки мусора (Garbage Collector) уничтожит данный объект. Метод GetHashCode() служит для генерации хэш-значений (типа Integer), которые могут быть использованы для хранения объектов в хэш-таблицах. Метод MemberwiseClone() создает точную копию объекта. Метод ToString() возвращает текстовое представление объекта. В большинстве случаев этот метод возвращает полное имя класса для данного объекта. Метод GetType() возвращает объект типа Type для данного экземпляра класса. Ниже мы расскажем, как используется класс Type. Класс Type и пространство имен ReflectionКласс Type является нашей точкой входа в пространство имен Reflection. Отражение (Reflection) в терминах .NET — это способность изучать возможности классов во время выполнения программы. Используя отражения, мы можем извлекать классы, изучать их методы, свойства, конструкторы, поля, события и другие члены, одним словом, получаем доступ к метаданным, ассоциированным с данным классом. Класс Type содержит методы типа GetMethods() и GetProperties(), которые могут использоваться для получения информации о членах класса. Используя классы, реализованные в пространстве имен Reflection, мы можем получать сведения, например, о параметрах методов (используя класс System.Reflection. MethodInfo) и даже вызывать методы с помощью метода Invoke(). В следующем примере показано, как начать использовать механизм отражений. Приведенный ниже код показывает, как с помощью метода GetType() получить объект Type и каким образом можно применять ряд свойств этого объекта:
·
'-------------------------------------------
Кратко рассмотрим основные возможности, предоставляемые пространством имен Reflection, а затем проиллюстрируем некоторые из них примерами.
Класс Assembly можно использовать для определения и загрузки сборок, загрузки модулей из манифеста сборки (assembly manifest), поиска типов, описанных в сборке, и создания экземпляров этих типов. Класс Module можно использовать для поиска классов в модуле, а также всех глобальных и локальных методов, определенных в данном модуле. Класс ConstructorInfo можно использовать для поиска имен, параметров, модификаторов доступа и другой информации о конструкторе. Поиск и вызов конструкторов мы можем осуществлять с помощью методов GetConstructors() или GetConstructor() объекта Type. Класс MethodInfo используется для поиска имен, возвращаемых типов, параметров, модификаторов доступа и другой информации о методе. Поиск и вызов методов мы можем осуществлять с помощью методов GetMethods() или GetMethod() объекта Type. Для поиска информации о полях — именах, модификаторах доступа и т.п. — используется класс FieldInfo. Кроме того, с помощью данного класса мы можем получать и задавать значения полей. Класс EventInfo используется для поиска имен, типов данных обработчиков событий и другой информации о событии. Данный класс позволяет добавлять и удалять обработчики событий. Класс PropertyInfo используется для поиска имен, типов данных и другой информации о свойствах. С помощью данного класса мы также можем получать и задавать значения свойств. Класс ParameterInfo используется для поиска информации о параметрах — названии, типе данных, и т.п. В следующем примере показано, как получить список типов, определенных в данном модуле.
·
'-------------------------------------------
Ниже показана выводимая данным кодом информация:
Как видно из вышеприведенного списка, в целом концепция отражений напоминает использование интерфейса ITypeLibrary в Win32 API для исследования библиотек типов, но версия для .NET предоставляет больше возможностей, более проста в использовании и более дружественна к различным языкам программирования. Теперь расширим наш пример и добавим информацию о свойствах, конструкторах, методах, интерфейсах и событиях. Для этого воспользуемся методами GetProperties(), GetConstructors(), GetMethods(), GetInterfaces() и GetEvents() объекта Type. Каждый из этих методов возвращает массив элементов типа PropertyInfo, MethodInfo, EventInfo и т.п. — каждый тип наследует от абстрактного типа MemberInfo, который мы и используем в нашем примере. Исключение составляет только тип PropertyInfo — этот тип используется для того, чтобы получить дополнительную информацию о свойствах:
·
'-------------------------------------------
Ниже показана информация, выводимая нашим примером для класса System.Array:
·
Class : System.Array Обратите внимание на то, что параметры методов не имеют названий — в листинге показаны только типы данных. Чтобы получить более подробную информацию о параметрах методов, мы должны воспользоваться методом GetParameters() и структурой ParameterInfo. Как это сделать, показано ниже:
·
' Теперь мы знаем названия параметров и их тип:
·
---- Методы ---- Для того чтобы получить доступ к сборке (в нашем примере мы использовали сборку по умолчанию (— mscorlib.dll), всегда загруженную в память), надо обратиться к этой сборке. Вот как это сделать:
·
Imports System.Reflection После того как мы получили доступ к модулю, мы можем либо изучить определенные в нем типы (как это сделать, показано в первом примере), либо получить информацию об интересующем нам типе. В следующем номере мы продолжим знакомство с библиотекой классов .NET Framework Class Library. Мы рассмотрим массивы (класс System.Array) и коллекции (пространство имен System.Collections). Рубрика: .NET Framework
Инструменты Internet Explorer 8 Beta 2 для разработчиков.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 05.09.2008
Google Developer Day 2008 в Москве.
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 05.09.2008
ТОП 10 самых раздражающих факторов для программиста.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…
Подробнее... |
Рубрика: Разное
| Добавлено: 03.09.2008
Остальные статьи:
Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|