В этом фрагменте кода параметры, связанные с каждым методом, сначала создаются с помощью методаGetParameters() и сохраняются в массивеpi.Затем в циклеforпроисходит обращение к элементам массиваpinвыводится тип и имя каждого параметра. Самое главное, что все эти сведения создаются динамически во время выполнения программы, не опираясь на предварительную осведомленность о классеMyClass.
Вторая форма метода GetMethods ()
Существует вторая форма методаGetMethods (), позволяющая указывать различные флажки для отфильтровывания извлекаемых сведений о методах. Ниже приведена эта общая форма методаGetMethods ().
Methodlnfo[] GetMethods(BindingFlags флажки)
В этом варианте создаются только те методы, которые соответствуют указанным критериям.BindingFlagsпредставляет собой перечисление. Ниже перечислен ряд наиболее часто используемых его значений.
Значение
Описание
DeclaredOnly
Извлекаются только те методы, которые определены в заданном классе. Унаследованные методы в извлекаемые сведения не включаются
Instance
Извлекаются методы экземпляра
NonPublic
Извлекаются методы, не являющиеся открытыми
Public
Извлекаются открытые методы
Static
Извлекаются статические методы
Два или несколько флажков можно объединить с помощью логической операции ИЛИ. Но как минимум флажокInstanceилиStaticследует указывать вместе с флажкомPublicилиNon Pub lie.В противном случае не будут извлечены сведения ни об одном из методов.
ФормаBindingFlagsметодаGetMethods() чаще всего применяется для получения списка методов, определенных в классе, без дополнительного извлечения наследуемых методов. Это особенно удобно в тех случаях, когда требуется исключить получение сведений о методах, определяемых в классе конкретного объекта. В качестве примера попробуем выполнить следующую замену в вызове методаGetMethods() из предыдущей программы.
// Теперь получаются сведения только о тех методах,
// которые объявлены в классе MyClass.
Methodlnfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);
После этой замены программа дает следующий результат.
Анализ методов, определенных в классе MyClass
Поддерживаемые методы:
Int32 Sum ()
Boolean IsBetween(Int32 i)
Void Set(Int32 a, Int32 b)
Void Set(Double a, Double b)
Void Show()
Как видите, теперь выводятся только те методы, которые явно определены в классеMyClass.
Вызов методов с помощью рефлексии
Как только методы, поддерживаемые определенным типом данных, становятся известны, их можно вызывать. Для этой цели служит методInvoke (), входящий в состав классаMethodlnf о.Ниже приведена одна из форм этого метода:
object Invoke(object