Type.GetMethod Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u een specifieke methode van de huidige Typeop.
Overloads
| Name | Description |
|---|---|
| GetMethod(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters, argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen en de opgegeven aanroepconventie. |
| GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met de opgegeven argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen en de opgegeven aanroepconventie. |
| GetMethod(String, Int32, BindingFlags, Binder, Type[], ParameterModifier[]) |
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters, argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen. |
| GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[]) |
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met de opgegeven argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen. |
| GetMethod(String, Int32, Type[], ParameterModifier[]) |
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters, argumenttypen en modifiers. |
| GetMethod(String, Int32, BindingFlags, Type[]) |
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters en argumenttypen, met behulp van de opgegeven bindingsbeperkingen. |
| GetMethod(String, Int32, Type[]) |
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters en argumenttypen. |
| GetMethod(String, BindingFlags, Type[]) |
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met de opgegeven argumenttypen, met behulp van de opgegeven bindingsbeperkingen. |
| GetMethod(String, Type[]) |
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met de opgegeven argumenttypen. |
| GetMethod(String, BindingFlags) |
Zoekt naar de opgegeven methode met behulp van de opgegeven bindingsbeperkingen. |
| GetMethod(String) |
Zoekt naar de openbare methode met de opgegeven naam. |
| GetMethod(String, Type[], ParameterModifier[]) |
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met de opgegeven argumenttypen en modifiers. |
GetMethod(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters, argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen en de opgegeven aanroepconventie.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, System::Reflection::CallingConventions callConvention, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * int * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
member this.GetMethod : string * int * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, genericParameterCount As Integer, bindingAttr As BindingFlags, binder As Binder, callConvention As CallingConventions, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
- genericParameterCount
- Int32
Het aantal algemene typeparameters van de methode.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
- binder
- Binder
Een object dat een set eigenschappen definieert en binding mogelijk maakt, waarbij een overbelaste methode, dwang van argumenttypen en het aanroepen van een lid via weerspiegeling kan worden geselecteerd.
– of –
Een null-verwijzing (Nothing in Visual Basic) om de DefaultBinder te gebruiken.
- callConvention
- CallingConventions
Het object dat de set regels specificeert die moeten worden gebruikt met betrekking tot de volgorde en indeling van argumenten, hoe de retourwaarde wordt doorgegeven, welke registers worden gebruikt voor argumenten en hoe de stapel wordt opgeschoond.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
- modifiers
- ParameterModifier[]
Een matrix met ParameterModifier objecten die de kenmerken vertegenwoordigen die zijn gekoppeld aan het bijbehorende element in de types matrix. Alleen worden gebruikt bij het aanroepen via COM-interoperabiliteit en alleen parameters die door verwijzing worden doorgegeven, worden verwerkt. Deze parameter wordt niet verwerkt door de standaard binder.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met het opgegeven algemene aantal parameters, argumenttypen, modifiers, bindingsbeperkingen en aanroepende conventie, indien gevonden; anders, null.
- Kenmerken
Uitzonderingen
name is null.
– of –
types is null.
– of –
Een van de elementen in de types matrix is null.
genericParameterCount is negatief.
Van toepassing op
GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met de opgegeven argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen en de opgegeven aanroepconventie.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, System::Reflection::CallingConventions callConvention, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, System::Reflection::CallingConventions callConvention, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.MethodInfo GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
member this.GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
abstract member GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
override this.GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * System.Reflection.CallingConventions * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, bindingAttr As BindingFlags, binder As Binder, callConvention As CallingConventions, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de methode die moet worden get.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
- binder
- Binder
Een object dat een set eigenschappen definieert en binding mogelijk maakt, waarbij een overbelaste methode, dwang van argumenttypen en het aanroepen van een lid via weerspiegeling kan worden geselecteerd.
– of –
Een null-verwijzing (Nothing in Visual Basic) om de DefaultBinder te gebruiken.
- callConvention
- CallingConventions
Het object dat de set regels specificeert die moeten worden gebruikt met betrekking tot de volgorde en indeling van argumenten, hoe de retourwaarde wordt doorgegeven, welke registers worden gebruikt voor argumenten en hoe de stapel wordt opgeschoond.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
- modifiers
- ParameterModifier[]
Een matrix met ParameterModifier objecten die de kenmerken vertegenwoordigen die zijn gekoppeld aan het bijbehorende element in de types matrix. Alleen worden gebruikt bij het aanroepen via COM-interoperabiliteit en alleen parameters die door verwijzing worden doorgegeven, worden verwerkt. Deze parameter wordt niet verwerkt door de standaard binder.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met de opgegeven vereisten, indien gevonden; anders, null.
Implementeringen
- Kenmerken
Uitzonderingen
Er wordt meer dan één methode gevonden met de opgegeven naam en overeenkomt met de opgegeven bindingsbeperkingen.
name is null.
– of –
types is null.
– of –
Een van de elementen in types is null.
Voorbeelden
In het volgende voorbeeld vindt u specifieke overbelastingen van MethodA, waarbij bindingsbeperkingen, aanroepende conventies en verschillende argumenttypen worden opgegeven.
Note
Voor het visual C# 2005-voorbeeld is de /unsafe compileroptie vereist.
using System;
using System.Reflection;
class Program3
{
// Methods to get:
public void MethodA(int i, int j) { }
public void MethodA(int[] i) { }
public unsafe void MethodA(int* i) { }
public void MethodA(ref int r) {}
// Method that takes an out parameter:
public void MethodA(int i, out int o) { o = 100;}
static void Main(string[] args)
{
MethodInfo mInfo;
// Get MethodA(int i, int j)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
CallingConventions.Any,
new Type[] { typeof(int), typeof(int) },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int[] i)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
CallingConventions.Any,
new Type[] { typeof(int[]) },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int* i)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
CallingConventions.Any,
new Type[] { typeof(int).MakePointerType() },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(ref int r)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
CallingConventions.Any,
new Type[] { typeof(int).MakeByRefType() },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int i, out int o)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
CallingConventions.Any,
new Type[] { typeof(int), typeof(int).MakeByRefType() },
null);
Console.WriteLine("Found method: {0}", mInfo);
}
}
open System.Reflection
type Program() =
// Methods to get:
member _.MethodA(i: int, j: int) = ()
member _.MethodA(i: int[]) = ()
member _.MethodA(i: int nativeptr) = ()
member _.MethodA(r: int byref) = ()
// Method that takes an outref parameter:
member _.MethodA(i: int, o: int outref) = o <- 100
do
// Get MethodA(int i, int j)
let mInfo =
typeof<Program>.GetMethod("MethodA", BindingFlags.Public ||| BindingFlags.Instance, null, CallingConventions.Any, [| typeof<int>; typeof<int> |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(int[] i)
let mInfo =
typeof<Program>.GetMethod("MethodA", BindingFlags.Public ||| BindingFlags.Instance, null, CallingConventions.Any, [| typeof<int[]> |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(int* i)
let mInfo =
typeof<Program>.GetMethod("MethodA", BindingFlags.Public ||| BindingFlags.Instance, null, CallingConventions.Any, [| typeof<int>.MakePointerType() |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(ref int r)
let mInfo =
typeof<Program>.GetMethod("MethodA", BindingFlags.Public ||| BindingFlags.Instance, null, CallingConventions.Any, [| typeof<int>.MakeByRefType() |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(int i, out int o)
let mInfo =
typeof<Program>.GetMethod("MethodA", BindingFlags.Public ||| BindingFlags.Instance, null, CallingConventions.Any, [| typeof<int>; typeof<int>.MakeByRefType() |], null)
printfn $"Found method: {mInfo}"
Imports System.Reflection
Imports System.Runtime.InteropServices
Class Program
' Methods to get:
Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long)
End Sub
Public Overloads Sub MethodA(ByVal i() As Integer)
End Sub
Public Overloads Sub MethodA(ByRef r As Integer)
End Sub
' Method that takes an integer and an out parameter. Note that an
' Imports reference is needed to System.Runtime.InteropServices
' for the <OutAttribute>, which can be shortened to <Out>.
Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
o = 100
End Sub
Public Shared Sub Main(ByVal args() As String)
Dim mInfo As MethodInfo
' Get MethodA(ByVal i As Integer, ByVal l As Long)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
CallingConventions.Any, _
New Type() {GetType(System.Int32), _
GetType(System.Int64)}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByVal i() As Integer)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
CallingConventions.Any, _
New Type() {GetType(System.Int32())}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByRef r As Integer)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
CallingConventions.Any, _
New Type() {GetType(System.Int32).MakeByRefType}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
CallingConventions.Any, _
New Type() {GetType(System.Int32), GetType(System.Int32).MakeByRefType}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
End Sub
End Class
Opmerkingen
Hoewel de standaardbinder ParameterModifier (het modifiers-argument) niet verwerkt, kunt u de abstracte klasse System.Reflection.Binder gebruiken om een aangepaste binder te schrijven die modifiers wel verwerkt.
ParameterModifier wordt alleen gebruikt bij het aanroepen via COM-interop en alleen parameters die worden doorgegeven door verwijzing, worden verwerkt.
In de volgende tabel ziet u welke leden van een basisklasse worden geretourneerd door de GetXXX methoden bij het weergeven van een type.
| Lidmaatschapssoort | Static | Niet-statisch |
|---|---|---|
| Constructeur | No | No |
| Veld | No | Yes. Een veld wordt altijd verborgen op basis van naam en kenmerk. |
| Gebeurtenis | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
| Methode | No | Yes. Een methode (zowel virtueel als niet-virtueel) kan worden verborgen op basis van naam of op basis van naam en handtekening. |
| Geneste type | No | No |
| Vastgoed | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
Hide-by-name-and-signature beschouwt alle onderdelen van de handtekening, waaronder aangepaste modifiers, retourtypen, parametertypen, sentinels en onbeheerde aanroepconventies. Dit is een binaire vergelijking.
Voor reflectie worden eigenschappen en gebeurtenissen verborgen op basis van naam en signatuur. Als u een eigenschap hebt met zowel een get als een set accessor in de basisklasse, maar de afgeleide klasse alleen een get-accessor heeft, verbergt de eigenschap afgeleide klasse de eigenschap basisklasse en hebt u geen toegang tot de setter op de basisklasse.
Aangepaste kenmerken maken geen deel uit van het algemene typesysteem.
De volgende BindingFlags filtervlagmen kunnen worden gebruikt om te definiëren welke methoden moeten worden opgenomen in de zoekopdracht:
U moet of
BindingFlags.InstanceofBindingFlags.Staticopgeven om een retour te krijgen.Geef
BindingFlags.Publicop dat openbare methoden moeten worden opgenomen in de zoekopdracht.Geef op
BindingFlags.NonPublicdat u niet-openbare methoden (dat wil gezegd privé-, interne en beveiligde methoden) wilt opnemen in de zoekopdracht.Geef
BindingFlags.FlattenHierarchyop dat u statische leden wilt opnemenpublicinprotectedde hiërarchie.privateStatische leden in overgenomen klassen zijn niet opgenomen.
De volgende BindingFlags wijzigingsvlagmen kunnen worden gebruikt om de werking van de zoekopdracht te wijzigen:
BindingFlags.IgnoreCaseom de hoofdlettergevoeligheid vannamete negeren.BindingFlags.DeclaredOnlyom alleen de methoden te doorzoeken die zijn gedeclareerd op de Type, niet de methoden die gewoon zijn overgenomen.
Zie System.Reflection.BindingFlags voor meer informatie.
Note
U kunt parameters niet weglaten bij het opzoeken van constructors en methoden. U kunt alleen parameters weglaten bij het aanroepen.
Als de huidige Type een geconstrueerd generiek type vertegenwoordigt, retourneert deze methode de MethodInfo met typeparameters vervangen door de geschikte typeargumenten.
Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, doorzoekt deze methode de methoden van de klassebeperking of de methoden van Object als er geen klassebeperking is.
Note
Voor algemene methoden moet u de typeargumenten niet opnemen in name. Met de C#-code GetMember("MyMethod<int>") wordt bijvoorbeeld gezocht naar een lid met de tekstnaam 'MyMethod<int>', in plaats van een methode met een naam MyMethod die één algemeen argument van het type intheeft.
Zie ook
- MethodInfo
- String
- BindingFlags
- Binder
- DefaultBinder
- CallingConventions
- ParameterModifier
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Van toepassing op
GetMethod(String, Int32, BindingFlags, Binder, Type[], ParameterModifier[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters, argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * int * System.Reflection.BindingFlags * System.Reflection.Binder * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
member this.GetMethod : string * int * System.Reflection.BindingFlags * System.Reflection.Binder * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, genericParameterCount As Integer, bindingAttr As BindingFlags, binder As Binder, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
- genericParameterCount
- Int32
Het aantal algemene typeparameters van de methode.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
- binder
- Binder
Een object dat een set eigenschappen definieert en binding mogelijk maakt, waarbij een overbelaste methode, dwang van argumenttypen en het aanroepen van een lid via weerspiegeling kan worden geselecteerd.
– of –
Een null-verwijzing (Nothing in Visual Basic) om de DefaultBinder te gebruiken.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
- modifiers
- ParameterModifier[]
Een matrix met ParameterModifier objecten die de kenmerken vertegenwoordigen die zijn gekoppeld aan het bijbehorende element in de types matrix. Alleen worden gebruikt bij het aanroepen via COM-interoperabiliteit en alleen parameters die door verwijzing worden doorgegeven, worden verwerkt. Deze parameter wordt niet verwerkt door de standaard binder.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met het opgegeven algemene aantal parameters, argumenttypen, modifiers en bindingsbeperkingen, indien gevonden; anders, null.
- Kenmerken
Uitzonderingen
name is null.
– of –
types is null.
– of –
Een van de elementen in de types matrix is null.
genericParameterCount is negatief.
Van toepassing op
GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met de opgegeven argumenttypen en modifiers, met behulp van de opgegeven bindingsbeperkingen.
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.MethodInfo GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
abstract member GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
override this.GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
abstract member GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
override this.GetMethod : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, bindingAttr As BindingFlags, binder As Binder, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de methode die moet worden get.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
- binder
- Binder
Een object dat een set eigenschappen definieert en binding mogelijk maakt, waarbij een overbelaste methode, dwang van argumenttypen en het aanroepen van een lid via weerspiegeling kan worden geselecteerd.
– of –
Een null-verwijzing (Nothing in Visual Basic) om de DefaultBinder te gebruiken.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
- modifiers
- ParameterModifier[]
Een matrix met ParameterModifier objecten die de kenmerken vertegenwoordigen die zijn gekoppeld aan het bijbehorende element in de types matrix. Alleen worden gebruikt bij het aanroepen via COM-interoperabiliteit en alleen parameters die door verwijzing worden doorgegeven, worden verwerkt. Deze parameter wordt niet verwerkt door de standaard binder.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met de opgegeven vereisten, indien gevonden; anders, null.
Implementeringen
- Kenmerken
Uitzonderingen
Er wordt meer dan één methode gevonden met de opgegeven naam en overeenkomt met de opgegeven bindingsbeperkingen.
name is null.
– of –
types is null.
– of –
Een van de elementen in types is null.
Voorbeelden
In het volgende voorbeeld vindt u specifieke overbelastingen van MethodA, waarbij bindingsbeperkingen en verschillende argumenttypen worden opgegeven.
Note
Voor het visual C# 2005-voorbeeld is de /unsafe compileroptie vereist.
using System;
using System.Reflection;
class Program5
{
// Methods to get:
public void MethodA(int i, int j) { }
public void MethodA(int[] i) { }
public unsafe void MethodA(int* i) { }
public void MethodA(ref int r) {}
// Method that takes an out parameter.
public void MethodA(int i, out int o) { o = 100; }
static void Main(string[] args)
{
MethodInfo mInfo;
// Get MethodA(int i, int j)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
new Type[] { typeof(int), typeof(int) },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int[] i)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
new Type[] { typeof(int[]) },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int* i)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
new Type[] { typeof(int).MakePointerType() },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(ref int r)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
new Type[] { typeof(int).MakeByRefType() },
null);
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int i, out int o)
mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance,
null,
new Type[] { typeof(int), typeof(int).MakeByRefType() },
null);
Console.WriteLine("Found method: {0}", mInfo);
}
}
open System
open System.Reflection
type Program() =
// Methods to get:
member _.MethodA(i: int, j: int) = ()
member _.MethodA(i: int[]) = ()
member _.MethodA(i: int nativeptr) = ()
member _.MethodA(r: int byref) = ()
// Method that takes an outref parameter:
member _.MethodA(i: int, o: int outref) = o <- 100
do
// Get MethodA(int i, int j)
let mInfo =
typeof<Program>.GetMethod("MethodA",BindingFlags.Public ||| BindingFlags.Instance, null, [| typeof<int>; typeof<int> |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(int[] i)
let mInfo =
typeof<Program>.GetMethod("MethodA",BindingFlags.Public ||| BindingFlags.Instance, null, [| typeof<int[]> |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(int* i)
let mInfo =
typeof<Program>.GetMethod("MethodA",BindingFlags.Public ||| BindingFlags.Instance, null, [| typeof<int>.MakePointerType() |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(ref int r)
let mInfo =
typeof<Program>.GetMethod("MethodA",BindingFlags.Public ||| BindingFlags.Instance, null, [| typeof<int>.MakeByRefType() |], null)
printfn $"Found method: {mInfo}"
// Get MethodA(int i, out int o)
let mInfo =
typeof<Program>.GetMethod("MethodA",BindingFlags.Public ||| BindingFlags.Instance, null, [| typeof<int>; typeof<int>.MakeByRefType() |], null)
printfn $"Found method: {mInfo}"
Imports System.Reflection
Imports System.Runtime.InteropServices
Class Program
' Methods to get:
Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long)
End Sub
Public Overloads Sub MethodA(ByVal i() As Integer)
End Sub
Public Overloads Sub MethodA(ByRef r As Integer)
End Sub
' Method that takes an out parameter. Note that an Imports
' reference is needed to System.Runtime.InteropServices
' for the <OutAttribute>, which can be shortened to <Out>.
Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
o = 100
End Sub
Public Shared Sub Main(ByVal args() As String)
Dim mInfo As MethodInfo
' Get MethodA(ByVal i As Integer, ByVal l As Long)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
New Type() {GetType(System.Int32), _
GetType(System.Int64)}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByVal i() As Integer)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
New Type() {GetType(System.Int32())}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByRef r As Integer)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
New Type() {GetType(System.Int32).MakeByRefType}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
mInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance, _
Nothing, _
New Type() {GetType(System.Int32), GetType(System.Int32).MakeByRefType}, _
Nothing)
Console.WriteLine("Found method: {0}", mInfo)
End Sub
End Class
Opmerkingen
Hoewel de standaardbinder ParameterModifier (het modifiers-argument) niet verwerkt, kunt u de abstracte klasse System.Reflection.Binder gebruiken om een aangepaste binder te schrijven die modifiers wel verwerkt.
ParameterModifier wordt alleen gebruikt bij het aanroepen via COM-interop en alleen parameters die worden doorgegeven door verwijzing, worden verwerkt.
De volgende BindingFlags filtervlagmen kunnen worden gebruikt om te definiëren welke methoden moeten worden opgenomen in de zoekopdracht:
U moet of
BindingFlags.InstanceofBindingFlags.Staticopgeven om een retour te krijgen.Geef
BindingFlags.Publicop dat openbare methoden moeten worden opgenomen in de zoekopdracht.Geef op
BindingFlags.NonPublicdat u niet-openbare methoden (dat wil gezegd privé-, interne en beveiligde methoden) wilt opnemen in de zoekopdracht.Geef
BindingFlags.FlattenHierarchyop dat u statische leden wilt opnemenpublicinprotectedde hiërarchie.privateStatische leden in overgenomen klassen zijn niet opgenomen.
De volgende BindingFlags wijzigingsvlagmen kunnen worden gebruikt om de werking van de zoekopdracht te wijzigen:
BindingFlags.IgnoreCaseom de hoofdlettergevoeligheid vannamete negeren.BindingFlags.DeclaredOnlyom alleen de methoden te doorzoeken die zijn gedeclareerd op de Type, niet de methoden die gewoon zijn overgenomen.
Zie System.Reflection.BindingFlags voor meer informatie.
Note
U kunt parameters niet weglaten bij het opzoeken van constructors en methoden. U kunt alleen parameters weglaten bij het aanroepen.
Als de huidige Type een geconstrueerd generiek type vertegenwoordigt, retourneert deze methode de MethodInfo met typeparameters vervangen door de geschikte typeargumenten.
Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, doorzoekt deze methode de methoden van de klassebeperking of de methoden van Object als er geen klassebeperking is.
Note
Voor algemene methoden moet u de typeargumenten niet opnemen in name. Met de C#-code GetMember("MyMethod<int>") wordt bijvoorbeeld gezocht naar een lid met de tekstnaam 'MyMethod<int>', in plaats van een methode met een naam MyMethod die één algemeen argument van het type intheeft.
Zie ook
- MethodInfo
- String
- BindingFlags
- Binder
- DefaultBinder
- ParameterModifier
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Van toepassing op
GetMethod(String, Int32, Type[], ParameterModifier[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters, argumenttypen en modifiers.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * int * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
member this.GetMethod : string * int * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, genericParameterCount As Integer, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
- genericParameterCount
- Int32
Het aantal algemene typeparameters van de methode.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
- modifiers
- ParameterModifier[]
Een matrix met ParameterModifier objecten die de kenmerken vertegenwoordigen die zijn gekoppeld aan het bijbehorende element in de types matrix. Alleen worden gebruikt bij het aanroepen via COM-interoperabiliteit en alleen parameters die door verwijzing worden doorgegeven, worden verwerkt. Deze parameter wordt niet verwerkt door de standaard binder.
Retouren
Een object dat de openbare methode vertegenwoordigt die overeenkomt met het opgegeven algemene aantal parameters, argumenttypen en modifiers, indien gevonden; anders, null.
- Kenmerken
Uitzonderingen
name is null.
– of –
types is null.
– of –
Een van de elementen in de types matrix is null.
genericParameterCount is negatief.
Van toepassing op
GetMethod(String, Int32, BindingFlags, Type[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters en argumenttypen, met behulp van de opgegeven bindingsbeperkingen.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, System::Reflection::BindingFlags bindingAttr, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * int * System.Reflection.BindingFlags * Type[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, genericParameterCount As Integer, bindingAttr As BindingFlags, types As Type()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de methode die moet worden get.
- genericParameterCount
- Int32
Het aantal algemene typeparameters van de methode.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met het opgegeven algemene aantal parameters, argumenttypen en bindingsbeperkingen, indien gevonden; anders, null.
- Kenmerken
Van toepassing op
GetMethod(String, Int32, Type[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters en argumenttypen.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, Type[] types);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, Type[] types);
public System.Reflection.MethodInfo? GetMethod(string name, int genericParameterCount, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * int * Type[] -> System.Reflection.MethodInfo
member this.GetMethod : string * int * Type[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, genericParameterCount As Integer, types As Type()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
- genericParameterCount
- Int32
Het aantal algemene typeparameters van de methode.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
Retouren
Een object dat de openbare methode vertegenwoordigt waarvan de parameters overeenkomen met het opgegeven algemene aantal parameters en argumenttypen, indien gevonden; anders, null.
- Kenmerken
Uitzonderingen
name is null.
– of –
types is null.
– of –
Een van de elementen in de types matrix is null.
genericParameterCount is negatief.
Van toepassing op
GetMethod(String, BindingFlags, Type[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode waarvan de parameters overeenkomen met de opgegeven argumenttypen, met behulp van de opgegeven bindingsbeperkingen.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, System::Reflection::BindingFlags bindingAttr, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * System.Reflection.BindingFlags * Type[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, bindingAttr As BindingFlags, types As Type()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de methode die moet worden get.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
-of- Standaard om te retourneren null.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald. -of- Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen die geen parameters gebruikt.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met de opgegeven vereisten, indien gevonden; anders, null.
- Kenmerken
Van toepassing op
GetMethod(String, Type[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met de opgegeven argumenttypen.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types);
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, Type[] types);
public System.Reflection.MethodInfo GetMethod(string name, Type[] types);
public System.Reflection.MethodInfo? GetMethod(string name, Type[] types);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * Type[] -> System.Reflection.MethodInfo
member this.GetMethod : string * Type[] -> System.Reflection.MethodInfo
abstract member GetMethod : string * Type[] -> System.Reflection.MethodInfo
override this.GetMethod : string * Type[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, types As Type()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
Retouren
Een object dat de openbare methode vertegenwoordigt waarvan de parameters overeenkomen met de opgegeven argumenttypen, indien gevonden; anders, null.
Implementeringen
- Kenmerken
Uitzonderingen
Er wordt meer dan één methode gevonden met de opgegeven naam en opgegeven parameters.
name is null.
– of –
types is null.
– of –
Een van de elementen in types is null.
types is multidimensionaal.
Voorbeelden
In het volgende voorbeeld vindt u specifieke overbelastingen van MethodA, waarbij verschillende argumenttypen worden opgegeven.
Note
Voor het visual C# 2005-voorbeeld is de /unsafe compileroptie vereist.
using System;
using System.Reflection;
class Program4
{
// Methods to get:
public void MethodA(int i, int j) { }
public void MethodA(int[] i) { }
public unsafe void MethodA(int* i) { }
public void MethodA(ref int r) {}
// Method that takes an out parameter:
public void MethodA(int i, out int o) { o = 100;}
static void Main(string[] args)
{
MethodInfo mInfo;
// Get MethodA(int i, int i)
mInfo = typeof(Program).GetMethod("MethodA",
new Type[] { typeof(int), typeof(int) });
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int[] i)
mInfo = typeof(Program).GetMethod("MethodA",
new Type[] { typeof(int[]) });
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int* i)
mInfo = typeof(Program).GetMethod("MethodA",
new Type[] { typeof(int).MakePointerType() });
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(ref int r)
mInfo = typeof(Program).GetMethod("MethodA",
new Type[] { typeof(int).MakeByRefType() });
Console.WriteLine("Found method: {0}", mInfo);
// Get MethodA(int i, out int o)
mInfo = typeof(Program).GetMethod("MethodA",
new Type[] { typeof(int), typeof(int).MakeByRefType() });
Console.WriteLine("Found method: {0}", mInfo);
}
}
type Program() =
// Methods to get:
member _.MethodA(i: int, j: int) = ()
member _.MethodA(i: int[]) = ()
member _.MethodA(i: int nativeptr) = ()
member _.MethodA(r: int byref) = ()
// Method that takes an outref parameter:
member _.MethodA(i: int, o: int outref) = o <- 100
do
// member MethodA: i: int * j: int -> unit
let mInfo = typeof<Program>.GetMethod("MethodA", [| typeof<int>; typeof<int> |])
printfn $"Found method: {mInfo}"
// member MethodA: i: int[] -> unit
let mInfo = typeof<Program>.GetMethod("MethodA", [| typeof<int[]> |])
printfn $"Found method: {mInfo}"
// member MethodA: i: nativeptr<int> -> unit
let mInfo = typeof<Program>.GetMethod("MethodA", [| typeof<int>.MakePointerType() |])
printfn $"Found method: {mInfo}"
// member MethodA: r: byref<int> -> unit
let mInfo = typeof<Program>.GetMethod("MethodA", [| typeof<int>.MakeByRefType() |])
printfn $"Found method: {mInfo}"
// member MethodA: i: int * o: outref<int> -> unit
let mInfo = typeof<Program>.GetMethod("MethodA", [| typeof<int>; typeof<int>.MakeByRefType() |])
printfn $"Found method: {mInfo}"
Imports System.Reflection
Imports System.Runtime.InteropServices
Class Program
' Methods to get:
Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long)
End Sub
Public Overloads Sub MethodA(ByVal i() As Integer)
End Sub
Public Overloads Sub MethodA(ByRef r As Integer)
End Sub
' Method that takes an out parameter. Note that an Imports
' reference is needed to System.Runtime.InteropServices
' for the <OutAttribute>, which can be shortened to <Out>.
Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
o = 100
End Sub
Public Shared Sub Main(ByVal args() As String)
Dim mInfo As MethodInfo
' Get MethodA(i As Integer i, l As Long)
mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer), GetType(Long)})
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(i As Integer())
mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer())})
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(ByRef r As Integer)
mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer).MakeByRefType})
Console.WriteLine("Found method: {0}", mInfo)
' Get MethodA(i As Integer, ByRef r As Integer)
mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer), _
GetType(Integer).MakeByRefType})
Console.WriteLine("Found method: {0}", mInfo)
End Sub
End Class
In het volgende voorbeeld worden objecten opgehaald die de MethodInfo methoden van een niet-algemeen type (de Add klasse), een open algemeen type (de ArrayList klasse) en een gesloten algemeen type (het List<T> type) vertegenwoordigenList(Of String).
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
public class Example
{
public static void Main()
{
// Get a Type object that represents a non-generic type.
GetAddMethod(typeof(ArrayList));
var list = new List<String>();
// Get a Type object that represents a constructed generic type.
Type closed = list.GetType();
GetAddMethod(closed);
// Get a Type object that represents an open generic type.
Type open = typeof(List<>);
GetAddMethod(open);
}
private static void GetAddMethod(Type typ)
{
MethodInfo method;
// Determine if this is a generic type.
if (typ.IsGenericType) {
// Is it an open generic type?
if (typ.ContainsGenericParameters)
method = typ.GetMethod("Add", typ.GetGenericArguments());
// Get closed generic type arguments.
else
method = typ.GetMethod("Add", typ.GenericTypeArguments);
}
// This is not a generic type.
else {
method = typ.GetMethod("Add", new Type[] { typeof(Object) } );
}
// Test if an Add method was found.
if (method == null) {
Console.WriteLine("No Add method found.");
return;
}
Type t = method.ReflectedType;
Console.Write("{0}.{1}.{2}(", t.Namespace, t.Name, method.Name);
ParameterInfo[] parms = method.GetParameters();
for (int ctr = 0; ctr < parms.Length; ctr++)
Console.Write("{0}{1}", parms[ctr].ParameterType.Name,
ctr < parms.Length - 1 ? ", " : "");
Console.WriteLine(")");
}
}
// The example displays the following output:
// System.Collections.ArrayList.Add(Object)
// System.Collections.Generic.List`1.Add(String)
// System.Collections.Generic.List`1.Add(T)
open System
open System.Collections
let getAddMethod (typ: Type) =
let method =
// Determine if this is a generic type.
if typ.IsGenericType then
// Is it an open generic type?
if typ.ContainsGenericParameters then
typ.GetMethod("Add", typ.GetGenericArguments())
// Get closed generic type arguments.
else
typ.GetMethod("Add", typ.GenericTypeArguments)
// This is not a generic type.
else
typ.GetMethod("Add", [| typeof<obj> |])
// Test if an Add method was found.
if method = null then
printfn "No Add method found."
else
let t = method.ReflectedType
printf $"{t.Namespace}.{t.Name}.{method.Name}("
let parms = method.GetParameters()
for i = 0 to parms.Length - 1 do
printf $"""{parms[i].ParameterType.Name}{if i < parms.Length - 1 then ", " else ""}"""
printfn ")"
// Get a Type object that represents a non-generic type.
getAddMethod typeof<ArrayList>
let list = ResizeArray<String>()
// Get a Type object that represents a constructed generic type.
let closed = list.GetType()
getAddMethod closed
// Get a Type object that represents an open generic type.
let opn = typeof<ResizeArray<_>>.GetGenericTypeDefinition()
getAddMethod opn
// The example displays the following output:
// System.Collections.ArrayList.Add(Object)
// System.Collections.Generic.List`1.Add(String)
// System.Collections.Generic.List`1.Add(T)
Imports System.Collections
Imports System.Collections.Generic
Imports System.Reflection
Module Example
Public Sub Main()
' Get a Type object that represents a non-generic type.
GetAddMethod(GetType(ArrayList))
Dim list As New List(Of String)()
' Get a Type object that represents a constructed generic type.
Dim closed As Type = list.GetType()
GetAddMethod(closed)
' Get a Type object that represents an open generic type.
Dim open As Type = GetType(List(Of))
GetAddMethod(open)
End Sub
Private Sub GetAddMethod(typ As Type)
Dim method As MethodInfo
' Determine if this is a generic type.
If typ.IsGenericType Then
' Is it an open generic type?
If typ.ContainsGenericParameters Then
method = typ.GetMethod("Add", typ.GetGenericArguments())
' Get closed generic type arguments.
Else
method = typ.GetMethod("Add", typ.GenericTypeArguments)
End If
' This is not a generic type.
Else
method = typ.GetMethod("Add", { GetType(Object) } )
End If
' Test if an Add method was found.
If method Is Nothing Then
Console.WriteLine("No Add method found.")
Exit Sub
End If
Dim t As Type = method.ReflectedType
Console.Write("{0}.{1}.{2}(", t.Namespace, t.Name, method.Name)
Dim params() As ParameterInfo = method.GetParameters()
For ctr As Integer = 0 To params.Length - 1
Console.Write("{0}{1}", params(ctr).ParameterType.Name,
If(ctr < params.Length - 1, ", ", ""))
Next
Console.WriteLine(")")
End Sub
End Module
' The example displays the following output:
' System.Collections.ArrayList.Add(Object)
' System.Collections.Generic.List`1.Add(String)
' System.Collections.Generic.List`1.Add(T)
In het voorbeeld wordt een GetAddMethod methode gedefinieerd waarmee het juiste MethodInfo object wordt opgehaald. Als u het types argument voor een open algemeen type wilt opgeven, wordt de methode aangeroepen Type.GetGenericArguments . Als u het types argument voor een gesloten algemeen type wilt opgeven, wordt de waarde van de Type.GenericTypeArguments eigenschap opgehaald.
Opmerkingen
De zoekopdracht name is hoofdlettergevoelig. De zoekopdracht bevat methoden voor openbare statische en openbare exemplaren.
Note
U kunt parameters niet weglaten bij het opzoeken van constructors en methoden. U kunt alleen parameters weglaten bij het aanroepen.
Als de huidige Type een geconstrueerd generiek type vertegenwoordigt, retourneert deze methode de MethodInfo met typeparameters vervangen door de geschikte typeargumenten.
Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, doorzoekt deze methode de methoden van de klassebeperking of de methoden van Object als er geen klassebeperking is.
Note
De name parameter kan geen typeargumenten bevatten. De C#-code GetMethod("MyGenericMethod<int>") zoekt bijvoorbeeld naar een methode met de tekstnaam 'MyGenericMethod<int>', in plaats van een methode met MyGenericMethod één algemeen argument van het type int. Gebruik in plaats daarvan GetMethod("MyGenericMethod") de juiste parameter in de types matrix.
Zie ook
- MethodInfo
- DefaultBinder
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Van toepassing op
GetMethod(String, BindingFlags)
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven methode met behulp van de opgegeven bindingsbeperkingen.
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.MethodInfo GetMethod(string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.MethodInfo? GetMethod(string name, System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
abstract member GetMethod : string * System.Reflection.BindingFlags -> System.Reflection.MethodInfo
override this.GetMethod : string * System.Reflection.BindingFlags -> System.Reflection.MethodInfo
abstract member GetMethod : string * System.Reflection.BindingFlags -> System.Reflection.MethodInfo
override this.GetMethod : string * System.Reflection.BindingFlags -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, bindingAttr As BindingFlags) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de methode die moet worden get.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
Retouren
Een object dat de methode vertegenwoordigt die overeenkomt met de opgegeven vereisten, indien gevonden; anders, null.
Implementeringen
- Kenmerken
Uitzonderingen
Er wordt meer dan één methode gevonden met de opgegeven naam en overeenkomt met de opgegeven bindingsbeperkingen.
name is null.
Voorbeelden
In het volgende voorbeeld wordt de methode ophaalt die overeenkomt met de opgegeven bindingsvlagmen.
using System;
using System.Reflection;
class Program2
{
// Method to get:
public void MethodA() { }
static void Main(string[] args)
{
// Get MethodA()
MethodInfo mInfo = typeof(Program).GetMethod("MethodA",
BindingFlags.Public | BindingFlags.Instance);
Console.WriteLine("Found method: {0}", mInfo);
}
}
open System.Reflection
type Program() =
// Method to get:
member _.MethodA() = ()
// Get MethodA()
let mInfo = typeof<Program>.GetMethod("MethodA", BindingFlags.Public ||| BindingFlags.Instance)
printfn $"Found method: {mInfo}"
Imports System.Reflection
Class Program
' Method to get:
Public Sub MethodA()
End Sub
Public Shared Sub Main(ByVal args() As String)
' Get MethodA()
Dim mInfo As MethodInfo = GetType(Program).GetMethod("MethodA", _
BindingFlags.Public Or BindingFlags.Instance)
Console.WriteLine("Found method: {0}", mInfo)
End Sub
End Class
Opmerkingen
De volgende BindingFlags filtervlagmen kunnen worden gebruikt om te definiëren welke methoden moeten worden opgenomen in de zoekopdracht:
U moet of BindingFlags.Instance of BindingFlags.Static opgeven om een retour te krijgen.
Geef BindingFlags.Public op dat openbare methoden moeten worden opgenomen in de zoekopdracht.
Geef op BindingFlags.NonPublic om niet-openbare methoden (dat wil gezegd privé-, interne en beveiligde methoden) op te nemen in de zoekopdracht.
Geef BindingFlags.FlattenHierarchy op dat u statische leden wilt opnemen
publicinprotectedde hiërarchie.privateStatische leden in overgenomen klassen zijn niet opgenomen.
De volgende BindingFlags wijzigingsvlagmen kunnen worden gebruikt om de werking van de zoekopdracht te wijzigen:
BindingFlags.IgnoreCase om de hoofdlettergevoeligheid van
namete negeren.BindingFlags.DeclaredOnly om alleen de methoden te doorzoeken die zijn gedeclareerd op de Type, niet de methoden die gewoon zijn overgenomen.
Zie System.Reflection.BindingFlags voor meer informatie.
Als een methode overbelast is en meer dan één overbelasting voldoet aan de beperkingen die zijn opgegeven door het bindingAttr argument, genereert de methode een AmbiguousMatchException uitzondering. In het volgende voorbeeld wordt een uitzondering gegenereerd omdat:
Het
TestClasstype heeft twee overbelastingen van het openbare exemplaar van deDisplayValuemethode enDisplayValue(String)DisplayValue(String, Object[]).Het
TestClasstype heeft twee overbelastingen van het openbare exemplaar van deEqualsmethode, waarvan een is overgenomen van Object:Equals(TestClass)enEquals(Object).
using System;
using System.Reflection;
public class TestClass
{
public void DisplayValue(String s)
{
Console.WriteLine(s);
}
public void DisplayValue(String s, params Object[] values)
{
Console.WriteLine(s, values);
}
public static bool Equals(TestClass t1, TestClass t2)
{
return Object.ReferenceEquals(t1, t2);
}
public bool Equals(TestClass t)
{
return Object.ReferenceEquals(this, t);
}
}
public class Example1
{
public static void Main()
{
Type t = typeof(TestClass);
RetrieveMethod(t, "DisplayValue", BindingFlags.Public | BindingFlags.Instance);
RetrieveMethod(t, "Equals", BindingFlags.Public | BindingFlags.Instance);
RetrieveMethod(t, "Equals", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
RetrieveMethod(t, "Equals", BindingFlags.Public | BindingFlags.Static);
}
private static void RetrieveMethod(Type t, String name, BindingFlags flags)
{
try
{
MethodInfo m = t.GetMethod(name, flags);
if (m != null)
{
Console.Write("{0}.{1}(", t.Name, m.Name);
ParameterInfo[] parms = m.GetParameters();
for (int ctr = 0; ctr < parms.Length; ctr++)
{
Console.Write(parms[ctr].ParameterType.Name);
if (ctr < parms.Length - 1)
Console.Write(", ");
}
Console.WriteLine(")");
}
else
{
Console.WriteLine("Method not found");
}
}
catch (AmbiguousMatchException)
{
Console.WriteLine("The following duplicate matches were found:");
MethodInfo[] methods = t.GetMethods(flags);
foreach (var method in methods)
{
if (method.Name != name) continue;
Console.Write(" {0}.{1}(", t.Name, method.Name);
ParameterInfo[] parms = method.GetParameters();
for (int ctr = 0; ctr < parms.Length; ctr++)
{
Console.Write(parms[ctr].ParameterType.Name);
if (ctr < parms.Length - 1)
Console.Write(", ");
}
Console.WriteLine(")");
}
}
Console.WriteLine();
}
}
// The example displays the following output:
// The following duplicate matches were found:
// TestClass.DisplayValue(String)
// TestClass.DisplayValue(String, Object[])
//
// The following duplicate matches were found:
// TestClass.Equals(TestClass)
// TestClass.Equals(Object)
//
// TestClass.Equals(TestClass)
//
// TestClass.Equals(TestClass, TestClass)
open System
open System.Reflection
type TestClass() =
member _.DisplayValue(s) =
printfn $"%s{s}"
member _.DisplayValue(s: string, [<ParamArray>]values: obj[]) =
Console.WriteLine(s, values)
member this.Equals(t: TestClass) =
Object.ReferenceEquals(this, t)
static member Equals(t1: TestClass, t2: TestClass) =
Object.ReferenceEquals(t1, t2)
let retrieveMethod (t: Type) name (flags: BindingFlags) =
try
let m = t.GetMethod(name, flags)
if m <> null then
printf $"{t.Name}.{m.Name}("
let parms = m.GetParameters()
for i = 0 to parms.Length - 1 do
printf $"{parms[i].ParameterType.Name}"
if i < parms.Length - 1 then
printf ", "
printfn ")"
else
printfn "Method not found"
with :? AmbiguousMatchException ->
printfn "The following duplicate matches were found:"
let methods = t.GetMethods flags
for method in methods do
if method.Name = name then
printf $" {t.Name}.{method.Name}("
let parms = method.GetParameters()
for i = 0 to parms.Length - 1 do
printf $"{parms[i].ParameterType.Name}"
if i < parms.Length - 1 then
printf ", "
printfn ")"
printfn ""
let t = typeof<TestClass>
retrieveMethod t "DisplayValue" (BindingFlags.Public ||| BindingFlags.Instance)
retrieveMethod t "Equals" (BindingFlags.Public ||| BindingFlags.Instance)
retrieveMethod t "Equals" (BindingFlags.Public ||| BindingFlags.Instance ||| BindingFlags.DeclaredOnly)
retrieveMethod t "Equals" (BindingFlags.Public ||| BindingFlags.Static)
// The example displays the following output:
// The following duplicate matches were found:
// TestClass.DisplayValue(String)
// TestClass.DisplayValue(String, Object[])
//
// The following duplicate matches were found:
// TestClass.Equals(TestClass)
// TestClass.Equals(Object)
//
// TestClass.Equals(TestClass)
//
// TestClass.Equals(TestClass, TestClass)
Imports System.Reflection
Public Class TestClass
Public Sub DisplayValue(s As String)
Console.WriteLine(s)
End Sub
Public Sub DisplayValue(s As String, ParamArray values() As Object)
Console.WriteLine(s, values)
End Sub
Public Overloads Shared Function Equals(t1 As TestClass, t2 As TestClass) As Boolean
Return Object.ReferenceEquals(t1, t2)
End Function
Public Overloads Function Equals(t As TestClass) As Boolean
Return Object.ReferenceEquals(Me, t)
End Function
End Class
Module Example
Public Sub Main()
Dim t As Type = GetType(TestClass)
RetrieveMethod(t, "DisplayValue", BindingFlags.Public Or BindingFlags.Instance)
RetrieveMethod(t, "Equals", BindingFlags.Public Or BindingFlags.Instance)
RetrieveMethod(t, "Equals", BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.DeclaredOnly)
RetrieveMethod(t, "Equals", BindingFlags.Public Or BindingFlags.Static)
End Sub
Public Sub RetrieveMethod(t As Type, name As String, flags As BindingFlags)
Try
Dim m As MethodInfo = t.GetMethod(name, flags)
If m IsNot Nothing Then
Console.Write("{0}.{1}(", t.Name, m.Name)
Dim parms() As ParameterInfo = m.GetParameters()
For ctr As Integer = 0 To parms.Length - 1
Console.Write(parms(ctr).ParameterType.Name)
if ctr < parms.Length - 1 Then
Console.Write(", ")
End If
Next
Console.WriteLine(")")
Else
Console.WriteLine("Method not found")
End If
Catch e As AmbiguousMatchException
Console.WriteLine("The following duplicate matches were found:")
Dim methods() As MethodInfo = t.GetMethods(flags)
For Each method In methods
If method.Name <> name Then Continue For
Console.Write(" {0}.{1}(", t.Name, method.Name)
Dim parms() As ParameterInfo = method.GetParameters()
For ctr As Integer = 0 To parms.Length - 1
Console.Write(parms(ctr).ParameterType.Name)
if ctr < parms.Length - 1 Then
Console.Write(", ")
End If
Next
Console.WriteLine(")")
Next
End Try
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' The following duplicate matches were found:
' TestClass.DisplayValue(String)
' TestClass.DisplayValue(String, Object[])
'
' The following duplicate matches were found:
' TestClass.Equals(TestClass)
' TestClass.Equals(Object)
'
' TestClass.Equals(TestClass)
'
' TestClass.Equals(TestClass, TestClass)
U kunt een van de volgende handelingen uitvoeren om een specifieke methode op te halen:
Wijzig de bindingsbeperkingen. In het vorige voorbeeld probeert u een methode voor een openbaar exemplaar
Equalsop te halen die is gedeclareerd door het type en niet is overgenomenEquals(TestClass).Roep een overbelasting aan van de GetMethod methode die een
typesparameter bevat waarmee de typen parameters van de methode worden gedefinieerd.Roep de GetMethods(BindingFlags) methode aan om een matrix op te halen die alle methoden bevat die behoren tot een type met de opgegeven bindingskenmerken. Vervolgens kunt u deze herhalen om de dubbele methoden met de naam
namete identificeren. Deze benadering wordt geïllustreerd in de handler van het vorige voorbeeld voor de AmbiguousMatchException uitzondering.
Als de huidige Type een geconstrueerd generiek type vertegenwoordigt, retourneert deze methode de MethodInfo met typeparameters vervangen door de geschikte typeargumenten.
Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, doorzoekt deze methode de methoden van de klassebeperking of de methoden van Object als er geen klassebeperking is.
Note
Voor algemene methoden moet u de typeargumenten niet opnemen in name. Met de C#-code GetMember("MyMethod<int>") wordt bijvoorbeeld gezocht naar een lid met de tekstnaam 'MyMethod<int>', in plaats van een methode met een naam MyMethod die één algemeen argument van het type intheeft.
Zie ook
- MethodInfo
- String
- BindingFlags
- DefaultBinder
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Van toepassing op
GetMethod(String)
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de openbare methode met de opgegeven naam.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name);
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name);
public System.Reflection.MethodInfo GetMethod(string name);
public System.Reflection.MethodInfo? GetMethod(string name);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string -> System.Reflection.MethodInfo
member this.GetMethod : string -> System.Reflection.MethodInfo
abstract member GetMethod : string -> System.Reflection.MethodInfo
override this.GetMethod : string -> System.Reflection.MethodInfo
Public Function GetMethod (name As String) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
Retouren
Een object dat de openbare methode vertegenwoordigt met de opgegeven naam, indien gevonden; anders, null.
Implementeringen
- Kenmerken
Uitzonderingen
Er wordt meer dan één methode gevonden met de opgegeven naam.
name is null.
Voorbeelden
In het volgende voorbeeld wordt een methode met de naam MethodA.
using System;
using System.Reflection;
class Program
{
// Method to get:
public void MethodA() { }
static void Main(string[] args)
{
// Get MethodA()
MethodInfo mInfo = typeof(Program).GetMethod("MethodA");
Console.WriteLine("Found method: {0}", mInfo);
}
}
type Program() =
// Method to get:
member _.MethodA() = ()
// Get MethodA()
let mInfo = typeof<Program>.GetMethod "MethodA"
printfn $"Found method: {mInfo}"
Imports System.Reflection
Class Program
' Method to get:
Public Sub MethodA()
End Sub
Public Shared Sub Main(ByVal args() As String)
' Get MethodA()
Dim mInfo As MethodInfo = GetType(Program).GetMethod("MethodA")
Console.WriteLine("Found method: {0}", mInfo)
End Sub
End Class
Opmerkingen
De zoekopdracht name is hoofdlettergevoelig. De zoekopdracht bevat methoden voor openbare statische en openbare exemplaren.
Als een methode overbelast is en meer dan één openbare methode heeft, genereert de GetMethod(String) methode een AmbiguousMatchException uitzondering. In het volgende voorbeeld wordt een uitzondering gegenereerd omdat er meer dan één openbare overbelasting van de Int32.ToString methode is. Aan de andere kant, omdat de Person.ToString methode overschrijft Object.ToString en daarom niet overbelast is, kan de GetMethod(String) methode het MethodInfo object ophalen.
using System;
using System.Reflection;
public class Person
{
public String FirstName;
public String LastName;
public override String ToString()
{
return (FirstName + " " + LastName).Trim();
}
}
public class Example2
{
public static void Main()
{
Type t = typeof(Person);
RetrieveMethod(t, "ToString");
t = typeof(Int32);
RetrieveMethod(t, "ToString");
}
private static void RetrieveMethod(Type t, String name)
{
try
{
MethodInfo m = t.GetMethod(name);
if (m != null)
Console.WriteLine("{0}.{1}: {2} method", m.ReflectedType.Name,
m.Name, m.IsStatic ? "Static" : "Instance");
else
Console.WriteLine("{0}.ToString method not found", t.Name);
}
catch (AmbiguousMatchException)
{
Console.WriteLine("{0}.{1} has multiple public overloads.",
t.Name, name);
}
}
}
// The example displays the following output:
// Person.ToString: Instance method
// Int32.ToString has multiple public overloads.
open System
open System.Reflection
type Person() =
member val FirstName = "" with get, set
member val LastName = "" with get, set
override this.ToString() =
(this.FirstName + " " + this.LastName).Trim()
let retrieveMethod (t: Type) name =
try
let m = t.GetMethod name
if m <> null then
printfn $"""{m.ReflectedType.Name}.{m.Name}: {if m.IsStatic then "Static" else "Instance"} method"""
else
printfn $"{t.Name}.ToString method not found"
with :? AmbiguousMatchException ->
printfn $"{t.Name}.{name} has multiple public overloads."
let t = typeof<Person>
retrieveMethod t "ToString"
let t2 = typeof<int>
retrieveMethod t2 "ToString"
// The example displays the following output:
// Person.ToString: Instance method
// Int32.ToString has multiple public overloads.
Imports System.Reflection
Public Class Person
Public FirstName As String
Public LastName As String
Public Overrides Function ToString() As String
Return (FirstName + " " + LastName).Trim()
End Function
End Class
Module Example
Public Sub Main()
Dim t As Type = GetType(Person)
RetrieveMethod(t, "ToString")
t = GetType(Int32)
RetrieveMethod(t, "ToString")
End Sub
Private Sub RetrieveMethod(t As Type, name As String)
Try
Dim m As MethodInfo = t.GetMethod(name)
If m IsNot Nothing Then
Console.WriteLine("{0}.{1}: {2} method", m.ReflectedType.Name,
m.Name, If(m.IsStatic, "Static", "Instance"))
Else
Console.WriteLine("{0}.ToString method not found", t.Name)
End If
Catch e As AmbiguousMatchException
Console.WriteLine("{0}.{1} has multiple public overloads.",
t.Name, name)
End Try
End Sub
End Module
' The example displays the following output:
' Person.ToString: Instance method
' Int32.ToString has multiple public overloads.
U kunt een van de volgende handelingen uitvoeren om een specifieke methode op te halen:
Roep de GetMethod(String, BindingFlags) methode aan en geef een
bindingAttrargument op waarmee de methode uniek wordt geïdentificeerd. Als de uitzondering bijvoorbeeld wordt gegenereerd omdat een type een statische en een overbelasting van een exemplaar heeft, kunt u eenbindingAttrargument van BindingFlags.Static of BindingFlags.Instance.Roep een overbelasting aan van de GetMethod methode die een
typesparameter bevat waarmee de typen parameters van de methode worden gedefinieerd.Roep de GetMethods() methode aan om een matrix op te halen die alle openbare methoden bevat die behoren tot een type. Vervolgens kunt u deze herhalen om de dubbele methoden met de naam
namete identificeren.
Als de huidige Type een geconstrueerd generiek type vertegenwoordigt, retourneert deze methode de MethodInfo met typeparameters vervangen door de geschikte typeargumenten.
Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, doorzoekt deze methode de methoden van de klassebeperking of de methoden van Object als er geen klassebeperking is.
Note
Voor algemene methoden moet u de typeargumenten niet opnemen in name. Met de C#-code GetMember("MyMethod<int>") wordt bijvoorbeeld gezocht naar een lid met de tekstnaam 'MyMethod<int>', in plaats van een methode met een naam MyMethod die één algemeen argument van het type intheeft.
Zie ook
- MethodInfo
- String
- DefaultBinder
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Van toepassing op
GetMethod(String, Type[], ParameterModifier[])
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Zoekt naar de opgegeven openbare methode waarvan de parameters overeenkomen met de opgegeven argumenttypen en modifiers.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)]
public System.Reflection.MethodInfo? GetMethod(string name, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.MethodInfo GetMethod(string name, Type[] types, System.Reflection.ParameterModifier[] modifiers);
public System.Reflection.MethodInfo? GetMethod(string name, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods)>]
member this.GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
member this.GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
abstract member GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
override this.GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parameters
- name
- String
De tekenreeks met de naam van de openbare methode die u wilt ophalen.
- types
- Type[]
Een matrix van Type objecten die het getal, de volgorde en het type van de parameters vertegenwoordigen voor de methode die moet worden opgehaald.
– of –
Een lege matrix met Type objecten (zoals opgegeven door het EmptyTypes veld) om een methode op te halen waarvoor geen parameters nodig zijn.
- modifiers
- ParameterModifier[]
Een matrix met ParameterModifier objecten die de kenmerken vertegenwoordigen die zijn gekoppeld aan het bijbehorende element in de types matrix. Alleen worden gebruikt bij het aanroepen via COM-interoperabiliteit en alleen parameters die door verwijzing worden doorgegeven, worden verwerkt. Deze parameter wordt niet verwerkt door de standaard binder.
Retouren
Een object dat de openbare methode vertegenwoordigt die overeenkomt met de opgegeven vereisten, indien gevonden; anders, null.
Implementeringen
- Kenmerken
Uitzonderingen
Er wordt meer dan één methode gevonden met de opgegeven naam en opgegeven parameters.
name is null.
– of –
types is null.
– of –
Een van de elementen in types is null.
Opmerkingen
Hoewel de standaardbinder ParameterModifier (het modifiers-argument) niet verwerkt, kunt u de abstracte klasse System.Reflection.Binder gebruiken om een aangepaste binder te schrijven die modifiers wel verwerkt.
ParameterModifier wordt alleen gebruikt bij het aanroepen via COM-interop en alleen parameters die worden doorgegeven door verwijzing, worden verwerkt.
De zoekopdracht name is hoofdlettergevoelig. De zoekopdracht bevat methoden voor openbare statische en openbare exemplaren.
Note
U kunt parameters niet weglaten bij het opzoeken van constructors en methoden. U kunt alleen parameters weglaten bij het aanroepen.
Als de huidige Type een geconstrueerd generiek type vertegenwoordigt, retourneert deze methode de MethodInfo met typeparameters vervangen door de geschikte typeargumenten.
Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, doorzoekt deze methode de methoden van de klassebeperking of de methoden van Object als er geen klassebeperking is.
Note
Voor algemene methoden moet u de typeargumenten niet opnemen in name. Met de C#-code GetMethod("MyMethod<int>") wordt bijvoorbeeld gezocht naar een lid met de tekstnaam 'MyMethod<int>', in plaats van een methode met een naam MyMethod die één algemeen argument van het type intheeft. Gebruik in plaats daarvan GetMethod("MyMethod") de juiste parameter in de types matrix.
Zie ook
- MethodInfo
- String
- DefaultBinder
- ParameterModifier
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()