Udostępnij za pośrednictwem


Type.GetMethods Metoda

Definicja

Pobiera metody bieżącego Typeobiektu .

Przeciążenia

Nazwa Opis
GetMethods()

Zwraca wszystkie publiczne metody bieżącego Typeobiektu .

GetMethods(BindingFlags)

Po zastąpieniu w klasie pochodnej wyszukuje metody zdefiniowane dla bieżącego Typeelementu , używając określonych ograniczeń powiązania.

GetMethods()

Źródło:
Type.cs
Źródło:
Type.cs
Ź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();
[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()

Zwraca

Tablica MethodInfo obiektów reprezentujących wszystkie metody publiczne zdefiniowane dla bieżącego Typeobiektu .

— lub —

Pusta tablica typu MethodInfo, jeśli dla bieżącego elementu Typenie zdefiniowano żadnych metod publicznych.

Implementuje

Atrybuty

Uwagi

W .NET 6 i starszych wersjach metoda GetMethods nie zwraca metod w określonej kolejności, takiej jak alfabetyczna lub kolejność deklaracji. Kod nie może zależeć od kolejności zwracania metod, ponieważ ta kolejność jest różna. Jednak począwszy od .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 członka Static Niestatyczny
Konstruktor Nie. Nie.
Pole Nie. Tak. Pole jest zawsze ukrywane za pomocą nazwy i podpisu.
Zdarzenie Nie dotyczy Zasadą wspólnego systemu typów jest to, że dziedziczenie jest takie samo jak w przypadku metod implementujących atrybut. Odbicie traktuje właściwości jako hide-by-name-and-signature. Zobacz notatkę 2 poniżej.
Metoda Nie. Tak. Metoda (zarówno wirtualna, jak i niewirtualna) może być ukrywana według nazwy lub według nazwy i podpisu.
Typ zagnieżdżony Nie. Nie.
Majątek Nie dotyczy Zasadą wspólnego systemu typów jest to, że dziedziczenie jest takie samo jak w przypadku metod implementujących atrybut. Odbicie traktuje właściwości jako hide-by-name-and-signature. Zobacz notatkę 2 poniżej.
  1. Funkcja Hide-by-name-and-signature uwzględnia wszystkie części podpisu, w tym niestandardowe modyfikatory, typy zwracane, typy parametrów, sentinels i niezarządzane konwencje wywoływania. Jest to porównanie binarne.

  2. W przypadku refleksji właściwości i zdarzenia są ukrywane przez nazwę i sygnaturę. Jeśli masz właściwość z akcesorami get i set w klasie bazowej, ale klasa pochodna ma tylko akcesor get, właściwość klasy pochodnej przesłania właściwość klasy bazowej i nie będzie można uzyskać dostępu do metody set w klasie bazowej.

  3. Atrybuty niestandardowe nie są częścią wspólnego systemu typów.

Uwaga / Notatka

Nie można pominąć parametrów podczas wyszukiwania konstruktorów i metod. Podczas wywoływania można pominąć tylko parametry.

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 przeszukuje metody ograniczenia klasy lub metody Object , jeśli nie ma ograniczenia klasy.

Zobacz też

Dotyczy

GetMethods(BindingFlags)

Źródło:
Type.cs
Źródło:
Type.cs
Źródło:
Type.cs
Źródło:
Type.cs
Źródło:
Type.cs

Po zastąpieniu 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);
[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()

Parametry

bindingAttr
BindingFlags

Bitowa kombinacja wartości wyliczenia określających 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 żadna z metod nie jest zdefiniowana dla bieżącego Typeelementu , lub jeśli żadna ze zdefiniowanych metod nie jest zgodna z ograniczeniami powiązania.

Implementuje

Atrybuty

Przykłady

Poniższy przykład tworzy klasę z dwiema metodami publicznymi i jedną chronioną Type metodą, tworzy obiekt odpowiadający MyTypeClassmetodom , pobiera wszystkie metody publiczne i inne niż publiczne i wyświetla ich nazwy.

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 jeden BindingFlags.Instance element i BindingFlags.Staticoraz co najmniej jeden BindingFlags.NonPublic z elementów i BindingFlags.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; nie są zwracane metody prywatne w klasach bazowych.

  • Określ BindingFlags.FlattenHierarchy, aby uwzględnić public i protected statyczne członków w hierarchii; private statyczne członkowie w klasach dziedziczonych 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 .NET 6 i starszych wersjach metoda GetMethods nie zwraca metod w określonej kolejności, takiej jak alfabetyczna lub kolejność deklaracji. Kod nie może zależeć od kolejności zwracania metod, ponieważ ta kolejność jest różna. Jednak począwszy od .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 przeszukuje metody ograniczenia klasy lub metody Object , jeśli nie ma ograniczenia klasy.

Zobacz też

Dotyczy