Type.GetMethods Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает методы текущего объекта Type.
Перегрузки
GetMethods(BindingFlags) |
При переопределении в производном классе ищет методы, определенные для текущего объекта Type, используя указанные ограничения привязки. |
GetMethods() |
Возвращает все открытые методы текущего объекта Type. |
GetMethods(BindingFlags)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
При переопределении в производном классе ищет методы, определенные для текущего объекта Type, используя указанные ограничения привязки.
public:
abstract cli::array <System::Reflection::MethodInfo ^> ^ GetMethods(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.MethodInfo[] GetMethods (System.Reflection.BindingFlags bindingAttr);
abstract member GetMethods : System.Reflection.BindingFlags -> System.Reflection.MethodInfo[]
Public MustOverride Function GetMethods (bindingAttr As BindingFlags) As MethodInfo()
Параметры
- bindingAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающих способ проведения поиска.
-или-
Default для возврата пустого массива.
Возвращаемое значение
Массив объектов MethodInfo, представляющий все методы, определенные для текущего типа Type и удовлетворяющие указанным ограничениям привязки.
-или-
Пустой массив типа MethodInfo, если для текущего объекта Type не определены методы или ни один из определенных методов не удовлетворяет ограничениям привязки.
Реализации
Примеры
В следующем примере создается класс с двумя открытыми методами и одним защищенным методом, создается объект, соответствующий Type
MyTypeClass
, получает все открытые и негласные методы и отображает их имена.
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
// Create a class having two public methods and one protected method.
public ref class MyTypeClass
{
public:
void MyMethods(){}
int MyMethods1()
{
return 3;
}
protected:
String^ MyMethods2()
{
return "hello";
}
};
void DisplayMethodInfo( array<MethodInfo^>^myArrayMethodInfo )
{
// Display information for all methods.
for ( int i = 0; i < myArrayMethodInfo->Length; i++ )
{
MethodInfo^ myMethodInfo = dynamic_cast<MethodInfo^>(myArrayMethodInfo[ i ]);
Console::WriteLine( "\nThe name of the method is {0}.", myMethodInfo->Name );
}
}
int main()
{
Type^ myType = MyTypeClass::typeid;
// Get the public methods.
array<MethodInfo^>^myArrayMethodInfo = myType->GetMethods( static_cast<BindingFlags>(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.
array<MethodInfo^>^myArrayMethodInfo1 = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
Console::WriteLine( "\nThe number of protected methods is {0}->", myArrayMethodInfo1->Length );
// Display information for all methods.
DisplayMethodInfo( myArrayMethodInfo1 );
}
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.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 , если ограничение класса отсутствует.
См. также раздел
- MethodInfo
- BindingFlags
- DefaultBinder
- GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Применяется к
GetMethods()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Возвращает все открытые методы текущего объекта Type.
public:
cli::array <System::Reflection::MethodInfo ^> ^ GetMethods();
public:
virtual cli::array <System::Reflection::MethodInfo ^> ^ GetMethods();
public System.Reflection.MethodInfo[] GetMethods ();
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
при отражении типа.
Тип члена | Статические | Нестатическое |
---|---|---|
Конструктор | Нет | Нет |
Поле | Нет | Да. Поле всегда является скрытием по имени и сигнатуре. |
Событие | Неприменимо | Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Метод | Нет | Да. Метод (как виртуальный, так и не виртуальный) может быть скрытием по имени или скрытием по имени и подписи. |
Вложенный тип | Нет | Нет |
Свойство. | Неприменимо | Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Функция скрытия по имени и подписи учитывает все части сигнатуры, включая настраиваемые модификаторы, типы возвращаемых значений, типы параметров, sentinels и соглашения о неуправляемых вызовах. Это двоичное сравнение.
Для отражения свойства и события представляют собой скрытие по имени и подписи. Если у вас есть свойство с методом доступа get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
Настраиваемые атрибуты не являются частью системы общих типов.
Примечание
При поиске конструкторов и методов нельзя опускать параметры. Опустить параметры можно только при вызове .
Если текущий Type тип представляет сконструированный универсальный тип, этот метод возвращает MethodInfo объекты с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type параметр представляет параметр типа в определении универсального типа или универсального метода, этот метод ищет методы ограничения класса или методы Object , если ограничение класса отсутствует.