Прочитать на английском

Поделиться через


Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) Метод

Определение

Возвращает отфильтрованный массив объектов MemberInfo, тип которого совпадает с указанным типом члена.

public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter? filter, object? filterCriteria);
public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter filter, object filterCriteria);

Параметры

memberType
MemberTypes

Побитовое сочетание значений перечисления, обозначающее тип искомого члена.

bindingAttr
BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.

-или-

Default для возврата null.

filter
MemberFilter

Делегат, выполняющий сравнение и возвращающий true, если проверяемый член соответствует условиям, заданным в параметре filterCriteria, и false в противном случае.

filterCriteria
Object

Условие поиска, определяющее, будет ли член включен в возвращаемый массив объектов MemberInfo.

Поля классов FieldAttributes, MethodAttributes и MethodImplAttributes могут использоваться вместе с делегатом FilterAttribute, предоставляемым этим классом.

Возвращаемое значение

Отфильтрованный массив объектов MemberInfo, имеющих тип указанного члена.

-или-

Пустой массив, если у текущего Type нет членов типа memberType, удовлетворяющих условиям фильтра.

Реализации

Исключения

filter имеет значение null.

Примеры

В следующем примере выполняется поиск всех членов класса, соответствующих заданным условиям поиска, а затем отображаются соответствующие члены.

using System;
using System.Reflection;

class MyFindMembersClass
{
    public static void Main()
    {
        Object objTest = new Object();
        Type objType = objTest.GetType ();
        MemberInfo[] arrayMemberInfo;
        try
        {
            //Find all static or public methods in the Object class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method,
                BindingFlags.Public | BindingFlags.Static| BindingFlags.Instance,
                new MemberFilter(DelegateToSearchCriteria),
                "ReferenceEquals");

            for(int index=0;index < arrayMemberInfo.Length ;index++)
                Console.WriteLine ("Result of FindMembers -\t"+ arrayMemberInfo[index].ToString() +"\n");
        }
        catch (Exception e)
        {
            Console.WriteLine ("Exception : " + e.ToString() );
        }
    }
    public static bool DelegateToSearchCriteria(MemberInfo objMemberInfo, Object objSearch)
    {
        // Compare the name of the member function with the filter criteria.
        if(objMemberInfo.Name.ToString() == objSearch.ToString())
            return true;
        else
            return false;
    }
}
/* The example produces the following output:

Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)
*/

Комментарии

Этот метод может быть переопределен производным классом.

Члены включают свойства, методы, поля, события и т. д.

FindMembers Чтобы метод успешно извлек сведения об элементеbindingAttr, аргумент должен содержать по крайней мере один из BindingFlags.Instance и BindingFlags.Static, а также по крайней мере один из BindingFlags.NonPublic и BindingFlags.Public.

BindingFlags Следующие флаги фильтра можно использовать для определения элементов, которые следует включить в поиск:

  • Укажите BindingFlags.Instance , чтобы включить элементы экземпляра в поиск.

  • Укажите BindingFlags.Static , чтобы включить статические элементы в поиск.

  • Укажите BindingFlags.Public , чтобы включить открытые члены в поиск.

  • Укажите BindingFlags.NonPublic , чтобы включить в поиск не открытые члены (т. е. частные, внутренние и защищенные элементы).

Для изменения способа поиска можно использовать следующие BindingFlags флаги модификаторов:

  • BindingFlags.DeclaredOnly для поиска только элементов, объявленных в Type, а не элементов, которые были просто унаследованы.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.

Чтобы получить инициализатор класса (статический конструктор) с помощью этого метода, необходимо указать BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic в Visual Basic). Вы также можете получить инициализатор класса с помощью TypeInitializer свойства .

Если текущий Type объект представляет параметр типа универсального типа или универсального метода, обрабатывает все члены, FindMembers объявленные ограничением класса и ограничениями интерфейса параметра типа.

Аргумент filter может быть пользовательским делегатом типа MemberFilterили одним из следующих предопределенных делегатов:

  • Type.FilterAttribute, в котором в качестве значения используется битоваяFieldAttributesMethodAttributes маска или MethodImplAttributes .filterCriteria

  • Type.FilterName, который выполняет сравнение с учетом регистра каждого имени элемента со строкой, передаваемой в filterCriteria.

  • Type.FilterNameIgnoreCase, который выполняет сравнение имен каждого члена без учета регистра со строкой, передаваемой в filterCriteria.

Применяется к

Продукт Версии

См. также раздел