Sdílet prostřednictvím


Type.GetMethods Metoda

Definice

Získá metody aktuálního Type.

Přetížení

Name Description
GetMethods()

Vrátí všechny veřejné metody aktuálního Type.

GetMethods(BindingFlags)

Při přepsání v odvozené třídě vyhledá metody definované pro aktuální Type, pomocí zadaných vazeb omezení.

GetMethods()

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Vrátí všechny veřejné metody aktuálního 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()

Návraty

Pole MethodInfo objektů představujících všechny veřejné metody definované pro aktuální Type.

nebo

Prázdné pole typu MethodInfo, pokud nejsou definovány žádné veřejné metody pro aktuální Type.

Implementuje

Atributy

Poznámky

V .NET 6 a starších verzích metoda GetMethods nevrací metody v určitém pořadí, jako je abecední pořadí nebo pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém se vrátí metody, protože se toto pořadí liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Konstruktory nejsou zahrnuty do pole metod vrácených tímto voláním. Proveďte samostatné volání pro GetConstructors() získání metod konstruktoru.

Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při reflexi typu.

Typ členu Statický. Nestatické
Konstruktor Ne Ne
Obor Ne Ano. Pole se vždy skryje podle názvu a signatury.
Zvláštní událost Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
Metoda Ne Ano. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu.
Vnořený typ Ne Ne
Vlastnictví Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
  1. Funkce skrytí podle jména a podpisu zohledňuje všechny části podpisu, včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.

  2. Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.

  3. Vlastní atributy nejsou součástí systému běžných typů.

Poznámka:

Při vyhledávání konstruktorů a metod nelze vynechat parametry. Parametry můžete vynechat pouze při vyvolání.

Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí MethodInfo objekty s parametry typu nahrazené příslušnými argumenty typu.

Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda hledá metody omezení třídy nebo metody Object , pokud neexistuje žádné omezení třídy.

Viz také

Platí pro

GetMethods(BindingFlags)

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Při přepsání v odvozené třídě vyhledá metody definované pro aktuální Type, pomocí zadaných vazeb omezení.

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

Bitové kombinace hodnot výčtu, které určují způsob provedení hledání.

nebo

Default pro vrácení prázdného pole.

Návraty

Pole MethodInfo objektů představujících všechny metody definované pro aktuální Type , které odpovídají zadaným omezením vazby.

nebo

Prázdné pole typu MethodInfo, pokud nejsou definovány žádné metody pro aktuální Type, nebo pokud žádná z definovaných metod neodpovídá omezením vazby.

Implementuje

Atributy

Příklady

Následující příklad vytvoří třídu se dvěma veřejnými metodami a jednou chráněnou metodou Type , vytvoří objekt odpovídající MyTypeClass, získá všechny veřejné a neveřejné metody a zobrazí jejich názvy.

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

Poznámky

GetMethods(BindingFlags) Aby přetížení úspěšně načetl informace o metodě, bindingAttr musí argument obsahovat alespoň jeden z BindingFlags.Instance a BindingFlags.Static, spolu s alespoň jedním z BindingFlags.NonPublic a BindingFlags.Public.

BindingFlags Následující příznaky filtru lze použít k definování metod, které mají být zahrnuty do vyhledávání:

  • Zadejte BindingFlags.Instance , aby zahrnovaly metody instance.

  • Zadejte BindingFlags.Static , aby zahrnovaly statické metody.

  • Zadejte BindingFlags.Public , aby byly do vyhledávání zahrnuty veřejné metody.

  • Zadejte BindingFlags.NonPublic , aby do vyhledávání byly zahrnuty neveřejné metody (tj. soukromé, interní a chráněné metody). Vrátí se pouze chráněné a interní metody základních tříd; privátní metody v základních třídách se nevrácejí.

  • Určete BindingFlags.FlattenHierarchy, aby se zahrnuly public a protected statické členy v hierarchii; ale private statické členy v zděděných třídách nejsou zahrnuty.

  • Zadejte BindingFlags.Default samostatně, aby se vrátilo prázdné MethodInfo pole.

Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:

  • BindingFlags.DeclaredOnly hledat pouze metody deklarované na Type, nikoli metody, které byly jednoduše zděděny.

Další informace naleznete na System.Reflection.BindingFlags.

V .NET 6 a starších verzích metoda GetMethods nevrací metody v určitém pořadí, jako je abecední pořadí nebo pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém se vrátí metody, protože se toto pořadí liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí MethodInfo objekty s parametry typu nahrazené příslušnými argumenty typu.

Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda hledá metody omezení třídy nebo metody Object , pokud neexistuje žádné omezení třídy.

Viz také

Platí pro