Type.GetMethods Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera metody bieżącego Type.
Przeciążenia
GetMethods(BindingFlags) |
W przypadku zastąpienia w klasie pochodnej wyszukuje metody zdefiniowane dla bieżącego Typeelementu , używając określonych ograniczeń powiązania. |
GetMethods() |
Zwraca wszystkie publiczne metody bieżącego Typeobiektu . |
GetMethods(BindingFlags)
- Źródło:
- Type.cs
- Źródło:
- Type.cs
- Źródło:
- Type.cs
W przypadku zastąpienia w klasie pochodnej wyszukuje metody zdefiniowane dla bieżącego Typeelementu , używając określonych ograniczeń powiązania.
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()
Parametry
- bindingAttr
- BindingFlags
Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.
-lub-
Default aby zwrócić pustą tablicę.
Zwraca
Tablica MethodInfo obiektów reprezentujących wszystkie metody zdefiniowane dla bieżącego, Type które są zgodne z określonymi ograniczeniami powiązania.
-lub-
Pusta tablica typu MethodInfo, jeśli dla bieżącej metody Typenie zdefiniowano żadnych metod lub jeśli żadna ze zdefiniowanych metod nie jest zgodna z ograniczeniami powiązania.
Implementuje
Przykłady
Poniższy przykład tworzy klasę z dwiema metodami publicznymi i jedną chronioną Type
metodą, tworzy obiekt odpowiadający MyTypeClass
metodom , pobiera wszystkie metody publiczne i inne niż publiczne i wyświetla ich nazwy.
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
Uwagi
GetMethods(BindingFlags)
Aby przeciążenie pomyślnie pobrało informacje o metodzie, bindingAttr
argument musi zawierać co najmniej jedną z elementów i , a także co najmniej jedną BindingFlags.NonPublicBindingFlags.Instance z wartości i BindingFlags.StaticBindingFlags.Public.
Następujące BindingFlags flagi filtru mogą służyć do definiowania metod do uwzględnienia w wyszukiwaniu:
Określ
BindingFlags.Instance
, aby uwzględnić metody wystąpienia.Określ
BindingFlags.Static
, aby uwzględnić metody statyczne.Określ
BindingFlags.Public
, aby uwzględnić metody publiczne w wyszukiwaniu.Określ
BindingFlags.NonPublic
, aby uwzględnić metody inne niż publiczne (czyli metody prywatne, wewnętrzne i chronione) w wyszukiwaniu. Zwracane są tylko metody chronione i wewnętrzne w klasach bazowych; metody prywatne w klasach bazowych nie są zwracane.Określ
BindingFlags.FlattenHierarchy
, aby uwzględnićpublic
iprotected
statyczne elementy członkowskie w hierarchii;private
składowe statyczne w odziedziczonych klasach nie są uwzględniane.Określ
BindingFlags.Default
sam, aby zwrócić pustą MethodInfo tablicę.
Następujące BindingFlags flagi modyfikatora mogą służyć do zmiany sposobu działania wyszukiwania:
-
BindingFlags.DeclaredOnly
aby wyszukać tylko metody zadeklarowane w metodzie Type, a nie metody, które zostały po prostu odziedziczone.
Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.
W przypadku platformy .NET 6 i starszych wersji GetMethods metoda nie zwraca metod w określonej kolejności, na przykład alfabetycznej lub kolejności deklaracji. Kod nie może zależeć od kolejności zwracania metod, ponieważ ta kolejność różni się. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca MethodInfo obiekty z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje metody ograniczenia klasy lub metody Object , jeśli nie ma ograniczenia klasy.
Zobacz też
- MethodInfo
- BindingFlags
- DefaultBinder
- GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Dotyczy
GetMethods()
- Źródło:
- Type.cs
- Źródło:
- Type.cs
- Źródło:
- Type.cs
Zwraca wszystkie publiczne metody bieżącego Typeobiektu .
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()
Zwraca
Tablica MethodInfo obiektów reprezentujących wszystkie metody publiczne zdefiniowane dla bieżącego Typeelementu .
-lub-
Pusta tablica typu MethodInfo, jeśli dla bieżącej wartości Typenie zdefiniowano żadnych metod publicznych.
Implementuje
Uwagi
W przypadku platformy .NET 6 i starszych wersji GetMethods metoda nie zwraca metod w określonej kolejności, na przykład alfabetycznej lub kolejności deklaracji. Kod nie może zależeć od kolejności zwracania metod, ponieważ ta kolejność różni się. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.
Konstruktory nie są uwzględniane w tablicy metod zwracanych przez to wywołanie. Utwórz oddzielne wywołanie, aby GetConstructors()
uzyskać metody konstruktora.
W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get
metody podczas odzwierciedlania typu.
Typ elementu członkowskiego | Static | Niestatyczna |
---|---|---|
Konstruktor | Nie | Nie |
Pole | Nie | Tak. Pole jest zawsze ukryte przez nazwę i podpis. |
Zdarzenie | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej. |
Metoda | Nie | Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis. |
Typu zagnieżdżony | Nie | Nie |
Właściwość | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej. |
Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.
W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.
Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.
Uwaga
Nie można pominąć parametrów przy wyszukiwaniu konstruktorów i metod. Parametry można pominąć jedynie podczas wywoływania.
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca MethodInfo obiekty z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje metody ograniczenia klasy lub metody Object , jeśli nie ma ograniczenia klasy.