Sdílet prostřednictvím


Type.GetMethods Metoda

Definice

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

Přetížení

GetMethods(BindingFlags)

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

GetMethods()

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

GetMethods(BindingFlags)

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);
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

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

-nebo-

Default vrátí prázdné pole.

Návraty

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

-nebo-

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

Implementuje

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í , MyTypeClasszíská všechny veřejné a neveřejné metody a zobrazí jejich názvy.

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

Poznámky

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

Následující BindingFlags příznaky filtru lze použít k definování metod, které se mají zahrnout do hledání:

  • Zadejte BindingFlags.Instance , chcete-li zahrnout metody instance.

  • Zadejte BindingFlags.Static , chcete-li zahrnout statické metody.

  • Zadejte BindingFlags.Public , chcete-li do vyhledávání zahrnout veřejné metody.

  • Zadejte BindingFlags.NonPublic , aby se do hledání zahrnuly neveřejné metody (tj. soukromé, interní a chráněné metody). Pouze chráněné a interní metody v základních třídách jsou vráceny; privátní metody v základních třídách se nevrátí.

  • Zadejte BindingFlags.FlattenHierarchy , chcete-li zahrnout public a protected statické členy v hierarchii; private statické členy ve zděděných třídách nebudou zahrnuty.

  • Pokud chcete vrátit prázdné MethodInfo pole, zadejte BindingFlags.Default samostatně.

Pomocí následujících BindingFlags příznaků modifikátoru můžete změnit způsob fungování vyhledávání:

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

Další informace naleznete v tématu System.Reflection.BindingFlags.

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

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

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

Viz také

Platí pro

GetMethods()

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

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

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()

Návraty

Pole MethodInfo objektů představující 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

Poznámky

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

Konstruktory nejsou zahrnuty v poli metod vrácených tímto voláním. Pokud chcete získat metody konstruktoru, GetConstructors() proveďte samostatné volání.

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

Typ členu Static Nestatický
Konstruktor Ne Ne
Pole No Yes. Pole je vždy skrýváno podle názvu a podpisu.
Událost Nelze použít Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu.
Vnořený typ No No
Vlastnost Nelze použít Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
  1. Skrývání podle názvu a podpisu bere v úvahu 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 účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.

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

Poznámka

Při hledání konstruktorů a metod nelze parametry vynechávat. Můžete je vynechat pouze při vyvolání.

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

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

Viz také

Platí pro