Иллюстрированный самоучитель по Visual Basic .NET

Функция GetType и рефлексия

Каждый тип .NET Framework представлен объектом Type. Класс Type содержит множество методов со сложными именами – например, метод GetMembers возвращает информацию об именах всех методов заданного класса. Метод GetType класса Object возвращает объект Type, при помощи которого можно получить информацию о типе во время выполнения программы. В частности, эта чрезвычайно полезная возможность используется для выполнения рефлексии (также используется термин "идентификация типов на стадии выполнения"). Кстати, пространство имен Reflection занимает столь важное место в работе .NET Framework, что оно автоматически импортируется в каждый проект VS IDE.

Чтобы увидеть, как выполняется рефлексия, включите в проект ссылку на сборку System.Windows.Forms и запустите приведенную ниже программу. Когда через короткий промежуток времени на экране появится приглашение, нажмите клавишу Enter. Продолжайте нажимать Enter, и постепенно в консольном окне будет выведена информация обо всех членах класса Windows.Forms.Form, на основе которого строятся графические приложения в .NET. Примерный вид окна показан на рис. 5.5.

Иллюстрированный самоучитель по Visual Basic .NET › Наследование и интерфейсы › Функция GetType и рефлексия
Рис. 5.5. Информация о членах класса Windows.Forms.Form, полученная посредством рефлексии

Примечание
В этой программе мы ограничиваемся простым вызовом ToString, но объекты Memberlnfo содержат гораздо больше полезной информации. За дополнительными сведениями обращайтесь к электронной документации
.

1 Option Strict On
2 Imports System.Windows.Forms
3 Module Modulel
4 Sub Main()
5 Dim aForm As New Windows.Forms.Form()
6 Dim a Type As Type
7 a Type = aForm.GetType()
8 Dim member As Object
9 Console.Writellne("This displays the members of the Form class")
10 Console.WriteLineC'Press enter to see the next one.")
11 For Each member In aType.GetMembers
12 Console.ReadLine()
13 Console. Write(member.ToSthng)
14 Next
15 Console.WriteLine("Press enter to end")
16 Console.ReadLine()
17 End Sub
18 End Module

В строках 6 и 7 мы получаем объект Type для класса Windows.Forms.Form. Затем, поскольку метод GetMembers класса Type возвращает коллекцию объектов Memberlnfo, описывающих члены класса, программа просто перебирает все элементы коллекции в строках 11-14.

Примечание
Замените Windows.Forms.Form другим классом, и вы получите информацию о членах этого класса. Для получения объекта Type также можно передать полное имя класса в строковом формате версии GetType, оформленной в виде общего метода класса Type. Рефлексия позволяет выполнять позднее связывание в VB.NET – методу InvokeMember передается строка с информацией о вызываемом методе (вероятно, полученной при помощи рефлексии). За дополнительными сведениями об этой возможности обращайтесь к описанию класса Type в документации .NET
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.