Type.GetMethods Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает методы текущего Type.
Перегрузки
| Имя | Описание |
|---|---|
| GetMethods() |
Возвращает все открытые методы текущего Type. |
| GetMethods(BindingFlags) |
При переопределении в производном классе выполняет поиск методов, определенных для текущего Type, с использованием указанных ограничений привязки. |
GetMethods()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Возвращает все открытые методы текущего Type.
public:
cli::array <System::Reflection::MethodInfo ^> ^ GetMethods();
public:
virtual cli::array <System::Reflection::MethodInfo ^> ^ GetMethods();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo[] GetMethods();
public System.Reflection.MethodInfo[] GetMethods();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethods : unit -> System.Reflection.MethodInfo[]
member this.GetMethods : unit -> System.Reflection.MethodInfo[]
abstract member GetMethods : unit -> System.Reflection.MethodInfo[]
override this.GetMethods : unit -> System.Reflection.MethodInfo[]
Public Function GetMethods () As MethodInfo()
Возвращаемое значение
Массив MethodInfo объектов, представляющих все открытые методы, определенные для текущего Type.
–или–
Пустой массив типа MethodInfo, если открытые методы не определены для текущего Type.
Реализации
- Атрибуты
Комментарии
В .NET 6 и более ранних версиях метод GetMethods не возвращает методы в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка возврата методов, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе порядка метаданных в сборке.
Конструкторы не включаются в массив методов, возвращаемых этим вызовом. Выполните отдельный вызов, чтобы GetConstructors() получить методы конструктора.
В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.
| Тип участника | Статика | Нестатическое |
|---|---|---|
| Конструктор | Нет | Нет |
| Поле | Нет | Да. Поле всегда скрывается по имени и подписи. |
| Event | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
| Метод | Нет | Да. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи. |
| Вложенный тип | Нет | Нет |
| Недвижимость | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.
Пользовательские атрибуты не являются частью общей системы типов.
Замечание
Параметры нельзя опустить при поиске конструкторов и методов. При вызове можно опустить только параметры.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает MethodInfo объекты с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск методов ограничения класса или методы Object, если ограничения класса отсутствуют.
См. также раздел
Применяется к
GetMethods(BindingFlags)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
При переопределении в производном классе выполняет поиск методов, определенных для текущего Type, с использованием указанных ограничений привязки.
public:
abstract cli::array <System::Reflection::MethodInfo ^> ^ GetMethods(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public abstract System.Reflection.MethodInfo[] GetMethods(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.MethodInfo[] GetMethods(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
abstract member GetMethods : System.Reflection.BindingFlags -> System.Reflection.MethodInfo[]
abstract member GetMethods : System.Reflection.BindingFlags -> System.Reflection.MethodInfo[]
Public MustOverride Function GetMethods (bindingAttr As BindingFlags) As MethodInfo()
Параметры
- bindingAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающее, как выполняется поиск.
–или–
Default для возврата пустого массива.
Возвращаемое значение
Массив объектов, представляющих все методы, определенные для текущего MethodInfoType , соответствующего указанным ограничениям привязки.
–или–
Пустой массив типа MethodInfo, если методы не определены для текущего Typeили если ни один из определенных методов не соответствует ограничениям привязки.
Реализации
- Атрибуты
Примеры
В следующем примере создается класс с двумя открытыми методами и одним защищенным методом, создает Type объект, соответствующий MyTypeClass, получает все открытые и не открытые методы и отображает их имена.
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);
}
}
}
Imports System.Reflection
Imports System.Reflection.Emit
' Create a class having two public methods and one protected method.
Public Class MyTypeClass
Public Sub MyMethods()
End Sub
Public Function MyMethods1() As Integer
Return 3
End Function 'MyMethods1
Protected Function MyMethods2() As [String]
Return "hello"
End Function 'MyMethods2
End Class
Public Class TypeMain
Public Shared Sub Main()
Dim myType As Type = GetType(MyTypeClass)
' Get the public methods.
Dim myArrayMethodInfo As MethodInfo() = myType.GetMethods((BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
Console.WriteLine((ControlChars.Cr + "The number of public methods is " & myArrayMethodInfo.Length.ToString() & "."))
' Display all the public methods.
DisplayMethodInfo(myArrayMethodInfo)
' Get the nonpublic methods.
Dim myArrayMethodInfo1 As MethodInfo() = myType.GetMethods((BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
Console.WriteLine((ControlChars.Cr + "The number of protected methods is " & myArrayMethodInfo1.Length.ToString() & "."))
' Display all the nonpublic methods.
DisplayMethodInfo(myArrayMethodInfo1)
End Sub
Public Shared Sub DisplayMethodInfo(ByVal myArrayMethodInfo() As MethodInfo)
' Display information for all methods.
Dim i As Integer
For i = 0 To myArrayMethodInfo.Length - 1
Dim myMethodInfo As MethodInfo = CType(myArrayMethodInfo(i), MethodInfo)
Console.WriteLine((ControlChars.Cr + "The name of the method is " & myMethodInfo.Name & "."))
Next i
End Sub
End Class
Комментарии
Чтобы перегрузка успешно извлекла сведения о методе GetMethods(BindingFlags) , bindingAttr аргумент должен включать по крайней мере один из BindingFlags.Instance и BindingFlags.Static, а также по крайней мере один из BindingFlags.NonPublic и BindingFlags.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, если ограничения класса отсутствуют.
См. также раздел
- MethodInfo
- BindingFlags
- DefaultBinder
- GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])