t = typeof(Testing); Console.WriteLine("Тип класса Testing: {0}", t); Как получить подробную информацию о классе? Пожалуй, следует рассказать не только о том, как можно получить переменную типа Type, а и о том, что можно с этой переменной делать. Этот и последующий раздел прерывают последовательное рассмотрение темы операций языка C#. Полагаю, понимание того, с какой целью выполняются те или иные операции, не менее важно, чем знание самой операции, И я не стал откладывать изложение этого материала на последующие лекции. | Можно ли, зная тип (класс), получить подробную информацию обо всех методах и полях класса? Ясно, что такая информация может быть весьма полезной, если класс поставлен сторонней фирмой. Оказывается, это сделать нетрудно. Вся необходимая информация содержится в метаданных, поставляемых вместе с классом. Процесс получения метаданных называется отражением (reflection). Об отражении и метаданных уже говорилось в первой вводной лекции, и эта тема будет обсуждаться и далее. А сейчас я приведу пример, демонстрирующий получение подробной информации о методах и полях класса. Первым делом следует упростить в проекте использование классов пространства имен Reflection, добавив в начало проекта предложение using System.Reflection. В класс Testing я добавил существенно расширенный вариант метода WhoIsWho, который уже появлялся в наших примерах. Вот текст новой версии этой процедуры: /// <summary> /// Подробная информация о классе объекта, его значении, /// методах класса, всех членов класса /// </summary> /// <param name="name">имя объекта</param> /// <param name="any">объект любого типа</param> public void WhoIsWho(string name,object any) { Type t = any.GetType(); Console.WriteLine("Тип {0}: {1} , значение: {2}", name, any.GetType(), any.ToString()); Console("Методы класса:"); MethodInfo[] ClassMethods = t.GetMethods(); foreach (MethodInfo curMethod in ClassMethods) { Console.WriteLine(curMethod); |