Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Здесь указано числовое значение
1
List<T>
Dictionary<TKey, TValue>
2
System.Collections.Generic.Dictionary`2
Рефлексия параметров и возвращаемых значений методов
Пока все хорошо! Далее мы внесем небольшое усовершенствование в текущее приложение. В частности, вы обновите вспомогательную функцию
ListMethods()
MethodInfo
ReturnType
GetParameters()
foreach
static void ListMethods(Type t)
{
Console.WriteLine("***** Methods *****");
MethodInfo[] mi = t.GetMethods();
foreach (MethodInfo m in mi)
{
// Получить возвращаемый тип.
string retVal = m.ReturnType.FullName;
string paramInfo = "( ";
// Получить параметры.
foreach (ParameterInfo pi in m.GetParameters())
{
paramInfo += string.Format("{0} {1} ", pi.ParameterType, pi.Name);
}
paramInfo += " )";
Теперь выведите на экран базовый метод sig.
Console.WriteLine("->{0} {1} {2}", retVal, m.Name, paramInfo);
}
Console.WriteLine();
}
Если вы запустите это обновленное приложение, вы обнаружите, что методы данного типа стали гораздо более подробными. Если вы введете в программу в качестве входных данных вашего доброго друга
System.Object
***** Methods *****
->System.Type GetType ( )
->System.String ToString ( )
->System.Boolean Equals ( System.Object obj )
->System.Boolean Equals ( System.Object objA System.Object objB )
->System.Boolean ReferenceEquals ( System.Object objA System.Object objB )
->System.Int32 GetHashCode ( )
Текущая реализация
ListMethods()
System.Reflection
XXXInfo
MethodInfo
PropertyInfo
EventInfo
ToString()
ListMethods()
MethodInfo
Name
static void ListMethods(Type t)
{
Console.WriteLine("***** Methods *****");
var methodNames = from n in t.GetMethods() select n;
foreach (var name in methodNames)
{
Console.WriteLine("->{0}", name);
}
Console.WriteLine();
}
Интересный материал, да? Очевидно, что пространство имен
System.Reflection
System.Type
MyTypeViewer
Тем не менее, на данном этапе вы создали (в некоторой степени способный) браузер объектов. Основное ограничение в этом конкретном примере заключается в том, что у вас нет возможности отразить не только текущую сборку (
MyTypeViewer
mscorlib.dll
Динамическая загрузка сборок
Бывают случаи, когда вам нужно программно загрузить сборки на лету, даже если нет записи о данной сборке в манифесте. Формально говоря, акт загрузки внешних сборок по требованию называется динамической загрузкой.
System.Reflection
Assembly
Assembly
Assembly
Чтобы проиллюстрировать динамическую загрузку, создайте новый проект консольного приложения с именем
ExternalAssemblyReflector
DisplayTypes()