В этом фрагменте кода параметры, связанные с каждым методом, сначала создаются с помощью метода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(objectobj,object[]parameters)

Перейти на страницу:

Похожие книги