Для получения информации о типе в более гибкой манере можно вызывать статический метод GetType()
System.Туре и указывать полностью заданное строковое имя типа, который планируется изучить. При таком подходе знать тип, из которого будут извлекаться метаданные, на этапе компиляции не нужно, т.к. метод Type.GetType() принимает в качестве параметра экземпляр вездесущего класса System.String.На заметку!
Когда речь идет о том, что при вызове методаТуре.GetType() знание типа на этапе компиляции не требуется, имеется в виду тот факт, что данный метод может принимать любое строковое значение (а не строго типизированную переменную). Разумеется, знать имя типа в строковом формате по-прежнему необходимо!Метод Туре.GetType()
// Получить информацию о типе с использованием статического
// метода Туре.GetType().
// (Не генерировать исключение, если тип SportsCar не удается найти,
// и игнорировать регистр символов.)
Type t = Type.GetType("CarLibrary.SportsCar", false, true);
В приведенном выше примере обратите внимание на то, что в строке, передаваемой методу GetType()
// Получить информацию о типе из внешней сборки.
Type t = Type.GetType("CarLibrary.SportsCar, CarLibrary");
Кроме того, в передаваемой методу GetType()
+) для обозначения SpyOptions), вложенного в класс по имени JamesBondCar. В таком случае можно написать следующий код:// Получить информацию о типе для вложенного перечисления
// внутри текущей сборки.
Type t = Type.GetType("CarLibrary.JamesBondCar+SpyOptions");
Построение специального средства для просмотра метаданных
Чтобы ознакомиться с базовым процессом рефлексии (и выяснить полезность класса System.Туре
MyTypeViewer. Приложение будет отображать детали методов, свойств, полей и поддерживаемых интерфейсов (в дополнение к другим интересным данным) для любого типа внутри System.Runtime.dll (вспомните, что все приложения .NET Core автоматически получают доступ к этой основной библиотеке классов платформы) или типа внутри самого приложения MyTypeViewer. После создания приложения не забудьте импортировать пространства имен System, System.Reflection и System.Linq:// Эти пространства имен должны импортироваться для выполнения
// любой рефлексии!
using System;
using System.Linq;
using System.Reflection;
Рефлексия методов
В класс Program
System.Туре и возвращает void. Первым делом определите метод ListMethods(), который выводит имена методов, определенных во входном типе. Обратите внимание, что Туре.GetMethods() возвращает массив объектов System.Reflection.MethodInfo, по которому можно осуществлять проход с помощью стандартного цикла foreach:// Отобразить имена методов в типе.
static void ListMethods(Type t)
{
Console.WriteLine("***** Methods *****");
MethodInfo[] mi = t.GetMethods();
foreach(MethodInfo m in mi)
{
Console.WriteLine("->{0}", m.Name);
}
Console.WriteLine();
}