Функция GetType и рефлексия
Каждый тип .NET Framework представлен объектом Туре. Класс Туре содержит множество методов со сложными именами — например, метод GetMembers возвращает информацию об именах всех методов заданного класса. Метод GetType класса Object возвращает объект Туре, при помощи которого можно получить информацию о типе во время выполнения программы. В частности, эта чрезвычайно полезная возможность используется для выполнения рефлексии (также используется термин «идентификация типов на стадии выполнения»). Кстати, пространство имен Reflection занимает столь важное место в работе .NET Framework, что оно автоматически импортируется в каждый проект VS IDE.
Чтобы увидеть, как выполняется рефлексия, включите в проект ссылку на сборку System.Windows.Forms и запустите приведенную ниже программу. Когда через короткий промежуток времени на экране появится приглашение, нажмите клавишу Enter. Продолжайте нажимать Enter, и постепенно в консольном окне будет выведена информация обо всех членах класса Windows. Forms. Form, на основе которого строятся графические приложения в .NET. Примерный вид окна показан на рис. 5.5.
Рис. 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 мы получаем объект Туре для класса Windows. Forms. Form. Затем, поскольку метод GetMembers класса Туре возвращает коллекцию объектов Memberlnfo, описывающих члены класса, программа просто перебирает все элементы коллекции в строках 11-14.
Замените Windows.Forms.Form другим классом, и вы получите информацию о членах этого класса. Для получения объекта Туре также можно передать полное имя класса в строковом формате версии GetType, оформленной в виде общего метода класса Туре. Рефлексия позволяет выполнять позднее связывание в VB .NET — методу InvokeMember передается строка с информацией о вызываемом методе (вероятно, полученной при помощи рефлексии). За дополнительными сведениями об этой возможности обращайтесь к описанию класса Туре в документации .NET.