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

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


Type.GetMethods Метод

Определение

Возвращает методы текущего объекта Type.

Перегрузки

GetMethods(BindingFlags)

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

GetMethods()

Возвращает все открытые методы текущего объекта Type.

GetMethods(BindingFlags)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

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

C#
public abstract System.Reflection.MethodInfo[] GetMethods(System.Reflection.BindingFlags bindingAttr);

Параметры

bindingAttr
BindingFlags

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

-или-

Default для возврата пустого массива.

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

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

-или-

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

Реализации

Примеры

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

C#
using System;
using System.Reflection;
using System.Reflection.Emit;

// Create a class having two public methods and one protected method.
public class MyTypeClass
{
    public void MyMethods()
    {
    }
    public int MyMethods1()
    {
        return 3;
    }
    protected String MyMethods2()
    {
        return "hello";
    }
}
public class TypeMain
{
    public static void Main()
    {
        Type myType =(typeof(MyTypeClass));
        // Get the public methods.
        MethodInfo[] myArrayMethodInfo = myType.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly);
        Console.WriteLine("\nThe number of public methods is {0}.", myArrayMethodInfo.Length);
        // Display all the methods.
        DisplayMethodInfo(myArrayMethodInfo);
        // Get the nonpublic methods.
        MethodInfo[] myArrayMethodInfo1 = myType.GetMethods(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly);
        Console.WriteLine("\nThe number of protected methods is {0}.", myArrayMethodInfo1.Length);
        // Display information for all methods.
        DisplayMethodInfo(myArrayMethodInfo1);		
    }
    public static void DisplayMethodInfo(MethodInfo[] myArrayMethodInfo)
    {
        // Display information for all methods.
        for(int i=0;i<myArrayMethodInfo.Length;i++)
        {
            MethodInfo myMethodInfo = (MethodInfo)myArrayMethodInfo[i];
            Console.WriteLine("\nThe name of the method is {0}.", myMethodInfo.Name);
        }
    }
}

Комментарии

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

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

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

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

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

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

  • Укажите BindingFlags.FlattenHierarchy , чтобы включить public и protected статические члены вверх по иерархии; private статические члены в унаследованных классах не включаются.

  • Укажите BindingFlags.Default только для возврата пустого MethodInfo массива.

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

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

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

В .NET 6 и более ранних версиях GetMethods метод не возвращает методы в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка, в котором возвращаются методы, так как этот порядок отличается. Однако, начиная с .NET 7, порядок является детерминированным на основе порядка метаданных в сборке.

Если текущий Type тип представляет сконструированный универсальный тип, этот метод возвращает MethodInfo объекты с параметрами типа, замененными соответствующими аргументами типа.

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

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

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

.NET 10 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetMethods()

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Возвращает все открытые методы текущего объекта Type.

C#
public System.Reflection.MethodInfo[] GetMethods();

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

Массив объектов MethodInfo, представляющий все открытые методы, определенные для текущего объекта Type.

-или-

Пустой массив типа MethodInfo, если для текущего типа Type открытые методы не определены.

Реализации

Комментарии

В .NET 6 и более ранних версиях GetMethods метод не возвращает методы в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка, в котором возвращаются методы, так как этот порядок отличается. Однако, начиная с .NET 7, порядок является детерминированным на основе порядка метаданных в сборке.

Конструкторы не включаются в массив методов, возвращаемых этим вызовом. Выполните отдельный вызов , GetConstructors() чтобы получить методы конструктора.

В следующей таблице показано, какие элементы базового класса возвращаются методами Get при отражении типа.

Тип члена Статические Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда является скрытием по имени и сигнатуре.
Событие Неприменимо Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (как виртуальный, так и не виртуальный) может быть скрытием по имени или скрытием по имени и подписи.
Вложенный тип Нет Нет
Свойство. Неприменимо Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Функция скрытия по имени и подписи учитывает все части сигнатуры, включая настраиваемые модификаторы, типы возвращаемых значений, типы параметров, sentinels и соглашения о неуправляемых вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события представляют собой скрытие по имени и подписи. Если у вас есть свойство с методом доступа get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.

  3. Настраиваемые атрибуты не являются частью системы общих типов.

Примечание

При поиске конструкторов и методов нельзя опускать параметры. Опустить параметры можно только при вызове .

Если текущий Type тип представляет сконструированный универсальный тип, этот метод возвращает MethodInfo объекты с параметрами типа, замененными соответствующими аргументами типа.

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

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

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

.NET 10 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1