Type.GetMethods Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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í , MyTypeClass
zí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 zahrnoutpublic
aprotected
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é
- MethodInfo
- BindingFlags
- DefaultBinder
- GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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. |
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í.
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.
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.