}
}
class ReflectDemo { static void Main() {
Type t = typeof(MyClass); // получить объект класса Type,
// представляющий класс MyClass
Console.WriteLine('Анализ методов, определенных ' +
'в классе ' + t.Name);
Console.WriteLine ();
Console.WriteLine('Поддерживаемые методы: ');
MethodInfo[] mi = t.GetMethods();
// Вывести методы, поддерживаемые в классе MyClass. foreach(Methodlnfo m in mi) {
// Вывести возвращаемый тип и имя каждого метода.
Console.Write(' ' + m.ReturnType.Name + ' ' + m.Name + '(');
// Вывести параметры.
Parameterlnfo[] pi = m.GetParameters() ; for(int i=0; i < pi.Length; i++) {
Console.Write(pi[i].ParameterType.Name + ' ' + pi[i].Name); if(i+l < pi.Length) Console.Write(', ');
}
Console.WriteLine(')');
Console.WriteLine();
}
}
}
Эта программа дает следующий результат.
Поддерживаемые методы:
Int32 Sum()
Boolean IsBetween (Int32 i)
Void Set(Int32 a, Int32 b)
Void Set (Double a, Double b)'
Void Show()
String ToString()
Boolean Equals(Object ob j )
Int32 GetHashCode()
Type GetType()
Как видите, помимо методов, определенных в классе MyClass, в данной программе выводятся также методы, определенные в классе ob j ect, поскольку все типы данных в C# наследуют от класса ob j ect. Кроме того, в качестве имен типов указываются имена структуры .NET. Обратите также внимание на то, что метод Set () выводится дважды, поскольку он перегружается. Один из его вариантов принимает аргументы типа int, а другой — аргументы типа double.
Рассмотрим эту программу более подробно. Прежде всего следует заметить, что в классе MyClass определен открытый конструктор и ряд открытых методов, в том числе и перегружаемый метод Set ().
Объект класса Туре, представляющий класс MyClass, создается в методе Main () в следующей строке кода.
Type t = typeof(MyClass); // получить объект класса Туре,
// представляющий класс MyClass
Напомним, что оператор typeof возвращает объект класса Туре, представляющий конкретный тип данных (в данном случае — класс MyClass).
С помощью переменной t и прикладного интерфейса Reflection API в данной программе затем выводятся сведения о методах, поддерживаемых в классе MyClass. Для этого в приведенной ниже строке кода сначала выводится список соответствующих методов.
MethodInfo[] mi = t.GetMethods();
Затем в цикле foreach организуется обращение к элементам массива mi. На каждом шаге этого цикла выводится возвращаемый тип, имя и параметры отдельного метода, как показано в приведенном ниже фрагменте кода.
