Type.GetMethod Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar en specifik metod för den aktuella Type.
Överlagringar
| Name | Description |
|---|---|
| GetMethod(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Söker efter den angivna metoden vars parametrar matchar det angivna allmänna parameterantalet, argumenttyper och modifierare, med hjälp av de angivna bindningsbegränsningarna och den angivna anropskonventionen. |
| GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Söker efter den angivna metoden vars parametrar matchar de angivna argumenttyperna och modifierarna med hjälp av de angivna bindningsbegränsningarna och den angivna anropskonventionen. |
| GetMethod(String, Int32, BindingFlags, Binder, Type[], ParameterModifier[]) |
Söker efter den angivna metoden vars parametrar matchar det angivna allmänna parameterantalet, argumenttyper och modifierare med hjälp av de angivna bindningsbegränsningarna. |
| GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[]) |
Söker efter den angivna metoden vars parametrar matchar de angivna argumenttyperna och modifierarna med hjälp av de angivna bindningsbegränsningarna. |
| GetMethod(String, Int32, Type[], ParameterModifier[]) |
Söker efter den angivna offentliga metoden vars parametrar matchar det angivna allmänna parameterantalet, argumenttyper och modifierare. |
| GetMethod(String, Type[], ParameterModifier[]) |
Söker efter den angivna offentliga metoden vars parametrar matchar de angivna argumenttyperna och modifierarna. |
| GetMethod(String, Int32, Type[]) |
Söker efter den angivna offentliga metoden vars parametrar matchar det angivna allmänna parameterantalet och argumenttyperna. |
| GetMethod(String, Type[]) |
Söker efter den angivna offentliga metoden vars parametrar matchar de angivna argumenttyperna. |
| GetMethod(String, BindingFlags) |
Söker efter den angivna metoden med de angivna bindningsbegränsningarna. |
| GetMethod(String) |
Söker efter den offentliga metoden med det angivna namnet. |
GetMethod(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Söker efter den angivna metoden vars parametrar matchar det angivna allmänna parameterantalet, argumenttyper och modifierare, med hjälp av de angivna bindningsbegränsningarna och den angivna anropskonventionen.
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);
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);
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
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
- genericParameterCount
- Int32
Antalet generiska typparametrar för metoden.
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera null.
- binder
- Binder
Ett objekt som definierar en uppsättning egenskaper och möjliggör bindning, vilket kan innebära val av en överbelastad metod, tvång av argumenttyper och anrop av en medlem genom reflektion.
-eller-
En null-referens (Nothing i Visual Basic) för att använda DefaultBinder.
- callConvention
- CallingConventions
Objektet som anger vilken uppsättning regler som ska användas för argumentens ordning och layout, hur returvärdet skickas, vilka register som används för argument och hur stacken rensas.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
- modifiers
- ParameterModifier[]
En matris med ParameterModifier objekt som representerar attributen som är associerade med motsvarande element i matrisen types . Används endast vid anrop via COM-interop och endast parametrar som skickas av referens hanteras. Standardbindaren bearbetar inte den här parametern.
Returer
Ett objekt som representerar metoden som matchar det angivna allmänna parameterantalet, argumenttyper, modifierare, bindningsbegränsningar och anropande konvention, om det hittas; annars . null
Undantag
name är null.
-eller-
types är null.
-eller-
Ett av elementen i matrisen types är null.
genericParameterCount är negativ.
Gäller för
GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Söker efter den angivna metoden vars parametrar matchar de angivna argumenttyperna och modifierarna med hjälp av de angivna bindningsbegränsningarna och den angivna anropskonventionen.
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);
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 System.Reflection.MethodInfo GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Reflection.CallingConventions callConvention, Type[] types, System.Reflection.ParameterModifier[] modifiers);
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
member 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
Parametrar
- name
- String
Strängen som innehåller namnet på den metod som ska hämtas.
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera null.
- binder
- Binder
Ett objekt som definierar en uppsättning egenskaper och möjliggör bindning, vilket kan innebära val av en överbelastad metod, tvång av argumenttyper och anrop av en medlem genom reflektion.
-eller-
En null-referens (Nothing i Visual Basic) för att använda DefaultBinder.
- callConvention
- CallingConventions
Objektet som anger vilken uppsättning regler som ska användas för argumentens ordning och layout, hur returvärdet skickas, vilka register som används för argument och hur stacken rensas.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
- modifiers
- ParameterModifier[]
En matris med ParameterModifier objekt som representerar attributen som är associerade med motsvarande element i matrisen types . Används endast vid anrop via COM-interop och endast parametrar som skickas av referens hanteras. Standardbindaren bearbetar inte den här parametern.
Returer
Ett objekt som representerar metoden som matchar de angivna kraven, om det hittas; annars . null
Implementeringar
Undantag
Mer än en metod hittas med det angivna namnet och matchar de angivna bindningsbegränsningarna.
name är null.
-eller-
types är null.
-eller-
Ett av elementen i types är null.
Exempel
I följande exempel hittar du specifika överlagringar av MethodA, som anger bindningsbegränsningar, anropar konventioner och en mängd olika argumenttyper.
Note
Visual C# 2005-exemplet kräver kompilatoralternativet /unsafe .
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
Kommentarer
Även om standardbindaren inte bearbetar ParameterModifier (parametern modifiers) kan du använda den abstrakta klassen System.Reflection.Binder för att skriva en anpassad bindare som bearbetar modifiers.
ParameterModifier används endast vid anrop via COM-interop, och endast parametrar som skickas av referens hanteras.
I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de GetXXX reflekterar över en typ.
| Medlemstyp | Statisk | Icke-statisk |
|---|---|---|
| Constructor | No | No |
| Fält | No | Ja. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature). |
| Händelse | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
| Metod | No | Ja. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature. |
| Kapslad typ | No | No |
| Property | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.
För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.
Anpassade attribut ingår inte i det vanliga typsystemet.
Följande BindingFlags filterflaggor kan användas för att definiera vilka metoder som ska ingå i sökningen:
Du måste ange antingen
BindingFlags.InstanceellerBindingFlags.Staticför att få en retur.Ange
BindingFlags.Publicatt offentliga metoder ska inkluderas i sökningen.Ange
BindingFlags.NonPublicatt icke-offentliga metoder (dvs. privata, interna och skyddade metoder) ska inkluderas i sökningen.Ange
BindingFlags.FlattenHierarchyatt inkluderapublicochprotectedstatiska medlemmar i hierarkin.privateStatiska medlemmar i ärvda klasser ingår inte.
Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:
BindingFlags.IgnoreCaseför att ignorera falletnamemed .BindingFlags.DeclaredOnlyom du bara vill söka efter de metoder som deklarerats på Type, inte metoder som helt enkelt ärvts.
Mer information finns i System.Reflection.BindingFlags.
Note
Du kan inte utelämna parametrar när du letar upp konstruktorer och metoder. Du kan bara utelämna parametrar när du anropar.
Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden MethodInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom metoderna för klassbegränsningen eller metoderna Object för om det inte finns någon klassbegränsning.
Note
För generiska metoder ska du inte ta med typargumenten i name. C#-koden GetMember("MyMethod<int>") söker till exempel efter en medlem med textnamnet "MyMethod<int>", i stället för en metod med namnet MyMethod som har ett allmänt argument av typen int.
Se även
- MethodInfo
- String
- BindingFlags
- Binder
- DefaultBinder
- CallingConventions
- ParameterModifier
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Gäller för
GetMethod(String, Int32, BindingFlags, Binder, Type[], ParameterModifier[])
Söker efter den angivna metoden vars parametrar matchar det angivna allmänna parameterantalet, argumenttyper och modifierare med hjälp av de angivna bindningsbegränsningarna.
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);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type[] types, System.Reflection.ParameterModifier[] modifiers);
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
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
- genericParameterCount
- Int32
Antalet generiska typparametrar för metoden.
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera null.
- binder
- Binder
Ett objekt som definierar en uppsättning egenskaper och möjliggör bindning, vilket kan innebära val av en överbelastad metod, tvång av argumenttyper och anrop av en medlem genom reflektion.
-eller-
En null-referens (Nothing i Visual Basic) för att använda DefaultBinder.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
- modifiers
- ParameterModifier[]
En matris med ParameterModifier objekt som representerar attributen som är associerade med motsvarande element i matrisen types . Används endast vid anrop via COM-interop och endast parametrar som skickas av referens hanteras. Standardbindaren bearbetar inte den här parametern.
Returer
Ett objekt som representerar metoden som matchar det angivna allmänna parameterantalet, argumenttyper, modifierare och bindningsbegränsningar, om det hittas. annars . null
Undantag
name är null.
-eller-
types är null.
-eller-
Ett av elementen i matrisen types är null.
genericParameterCount är negativ.
Gäller för
GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[])
Söker efter den angivna metoden vars parametrar matchar de angivna argumenttyperna och modifierarna med hjälp av de angivna bindningsbegränsningarna.
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);
public System.Reflection.MethodInfo GetMethod(string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type[] types, System.Reflection.ParameterModifier[] modifiers);
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
Parametrar
- name
- String
Strängen som innehåller namnet på den metod som ska hämtas.
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera null.
- binder
- Binder
Ett objekt som definierar en uppsättning egenskaper och möjliggör bindning, vilket kan innebära val av en överbelastad metod, tvång av argumenttyper och anrop av en medlem genom reflektion.
-eller-
En null-referens (Nothing i Visual Basic) för att använda DefaultBinder.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
- modifiers
- ParameterModifier[]
En matris med ParameterModifier objekt som representerar attributen som är associerade med motsvarande element i matrisen types . Används endast vid anrop via COM-interop och endast parametrar som skickas av referens hanteras. Standardbindaren bearbetar inte den här parametern.
Returer
Ett objekt som representerar metoden som matchar de angivna kraven, om det hittas; annars . null
Implementeringar
Undantag
Mer än en metod hittas med det angivna namnet och matchar de angivna bindningsbegränsningarna.
name är null.
-eller-
types är null.
-eller-
Ett av elementen i types är null.
Exempel
I följande exempel hittar du specifika överlagringar av MethodA, som anger bindningsbegränsningar och en mängd olika argumenttyper.
Note
Visual C# 2005-exemplet kräver kompilatoralternativet /unsafe .
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
Kommentarer
Även om standardbindaren inte bearbetar ParameterModifier (parametern modifiers) kan du använda den abstrakta klassen System.Reflection.Binder för att skriva en anpassad bindare som bearbetar modifiers.
ParameterModifier används endast vid anrop via COM-interop, och endast parametrar som skickas av referens hanteras.
Följande BindingFlags filterflaggor kan användas för att definiera vilka metoder som ska ingå i sökningen:
Du måste ange antingen
BindingFlags.InstanceellerBindingFlags.Staticför att få en retur.Ange
BindingFlags.Publicatt offentliga metoder ska inkluderas i sökningen.Ange
BindingFlags.NonPublicatt icke-offentliga metoder (dvs. privata, interna och skyddade metoder) ska inkluderas i sökningen.Ange
BindingFlags.FlattenHierarchyatt inkluderapublicochprotectedstatiska medlemmar i hierarkin.privateStatiska medlemmar i ärvda klasser ingår inte.
Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:
BindingFlags.IgnoreCaseför att ignorera falletnamemed .BindingFlags.DeclaredOnlyom du bara vill söka efter de metoder som deklarerats på Type, inte metoder som helt enkelt ärvts.
Mer information finns i System.Reflection.BindingFlags.
Note
Du kan inte utelämna parametrar när du letar upp konstruktorer och metoder. Du kan bara utelämna parametrar när du anropar.
Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden MethodInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom metoderna för klassbegränsningen eller metoderna Object för om det inte finns någon klassbegränsning.
Note
För generiska metoder ska du inte ta med typargumenten i name. C#-koden GetMember("MyMethod<int>") söker till exempel efter en medlem med textnamnet "MyMethod<int>", i stället för en metod med namnet MyMethod som har ett allmänt argument av typen int.
Se även
- MethodInfo
- String
- BindingFlags
- Binder
- DefaultBinder
- ParameterModifier
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Gäller för
GetMethod(String, Int32, Type[], ParameterModifier[])
Söker efter den angivna offentliga metoden vars parametrar matchar det angivna allmänna parameterantalet, argumenttyper och modifierare.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, Type[] types, System.Reflection.ParameterModifier[] modifiers);
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
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
- genericParameterCount
- Int32
Antalet generiska typparametrar för metoden.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
- modifiers
- ParameterModifier[]
En matris med ParameterModifier objekt som representerar attributen som är associerade med motsvarande element i matrisen types . Används endast vid anrop via COM-interop och endast parametrar som skickas av referens hanteras. Standardbindaren bearbetar inte den här parametern.
Returer
Ett objekt som representerar den offentliga metoden som matchar det angivna allmänna parameterantalet, argumenttyper och modifierare, om det hittas. annars . null
Undantag
name är null.
-eller-
types är null.
-eller-
Ett av elementen i matrisen types är null.
genericParameterCount är negativ.
Gäller för
GetMethod(String, Type[], ParameterModifier[])
Söker efter den angivna offentliga metoden vars parametrar matchar de angivna argumenttyperna och modifierarna.
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public System.Reflection.MethodInfo GetMethod(string name, Type[] types, System.Reflection.ParameterModifier[] modifiers);
abstract member GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
override this.GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
member this.GetMethod : string * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, types As Type(), modifiers As ParameterModifier()) As MethodInfo
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
- modifiers
- ParameterModifier[]
En matris med ParameterModifier objekt som representerar attributen som är associerade med motsvarande element i matrisen types . Används endast vid anrop via COM-interop och endast parametrar som skickas av referens hanteras. Standardbindaren bearbetar inte den här parametern.
Returer
Ett objekt som representerar den offentliga metoden som matchar de angivna kraven, om det hittas; annars . null
Implementeringar
Undantag
Mer än en metod hittas med det angivna namnet och angivna parametrar.
name är null.
-eller-
types är null.
-eller-
Ett av elementen i types är null.
Kommentarer
Även om standardbindaren inte bearbetar ParameterModifier (parametern modifiers) kan du använda den abstrakta klassen System.Reflection.Binder för att skriva en anpassad bindare som bearbetar modifiers.
ParameterModifier används endast vid anrop via COM-interop, och endast parametrar som skickas av referens hanteras.
Sökningen efter name är skiftlägeskänslig. Sökningen innehåller offentliga metoder för statiska och offentliga instanser.
Note
Du kan inte utelämna parametrar när du letar upp konstruktorer och metoder. Du kan bara utelämna parametrar när du anropar.
Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden MethodInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom metoderna för klassbegränsningen eller metoderna Object för om det inte finns någon klassbegränsning.
Note
För generiska metoder ska du inte ta med typargumenten i name. C#-koden GetMethod("MyMethod<int>") söker till exempel efter en medlem med textnamnet "MyMethod<int>", i stället för en metod med namnet MyMethod som har ett allmänt argument av typen int. Använd GetMethod("MyMethod") i stället med lämplig parameter i matrisen types .
Se även
- MethodInfo
- String
- DefaultBinder
- ParameterModifier
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Gäller för
GetMethod(String, Int32, Type[])
Söker efter den angivna offentliga metoden vars parametrar matchar det angivna allmänna parameterantalet och argumenttyperna.
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, int genericParameterCount, cli::array <Type ^> ^ types);
public System.Reflection.MethodInfo GetMethod(string name, int genericParameterCount, Type[] types);
member this.GetMethod : string * int * Type[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, genericParameterCount As Integer, types As Type()) As MethodInfo
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
- genericParameterCount
- Int32
Antalet generiska typparametrar för metoden.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
Returer
Ett objekt som representerar den offentliga metoden vars parametrar matchar det angivna allmänna parameterantalet och argumenttyperna, om det hittas. annars . null
Undantag
name är null.
-eller-
types är null.
-eller-
Ett av elementen i matrisen types är null.
genericParameterCount är negativ.
Gäller för
GetMethod(String, Type[])
Söker efter den angivna offentliga metoden vars parametrar matchar de angivna argumenttyperna.
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types);
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, cli::array <Type ^> ^ types);
public System.Reflection.MethodInfo GetMethod(string name, Type[] types);
abstract member GetMethod : string * Type[] -> System.Reflection.MethodInfo
override this.GetMethod : string * Type[] -> System.Reflection.MethodInfo
member this.GetMethod : string * Type[] -> System.Reflection.MethodInfo
Public Function GetMethod (name As String, types As Type()) As MethodInfo
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
- types
- Type[]
En matris med Type objekt som representerar antalet, ordningen och typen av parametrar som metoden ska hämta.
-eller-
En tom matris med Type objekt (som tillhandahålls av fältet EmptyTypes ) för att hämta en metod som inte tar några parametrar.
Returer
Ett objekt som representerar den offentliga metoden vars parametrar matchar de angivna argumenttyperna, om det hittas. annars . null
Implementeringar
Undantag
Mer än en metod hittas med det angivna namnet och angivna parametrar.
name är null.
-eller-
types är null.
-eller-
Ett av elementen i types är null.
types är flerdimensionellt.
Exempel
I följande exempel hittas specifika överlagringar av MethodA, som anger en mängd olika argumenttyper.
Note
Visual C# 2005-exemplet kräver kompilatoralternativet /unsafe .
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
I följande exempel hämtas MethodInfo objekt som representerar Add metoderna av en icke-generisk typ ( ArrayList klassen), en öppen generisk typ ( List<T> klassen) och en sluten List(Of String) allmän typ (typen.
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)
I exemplet definieras en GetAddMethod metod som hämtar rätt MethodInfo objekt. Om du vill ange types argumentet för en öppen allmän typ anropas Type.GetGenericArguments metoden. Om du vill ange argumentet för en sluten types allmän typ hämtar den värdet för Type.GenericTypeArguments egenskapen.
Kommentarer
Sökningen efter name är skiftlägeskänslig. Sökningen innehåller offentliga metoder för statiska och offentliga instanser.
Note
Du kan inte utelämna parametrar när du letar upp konstruktorer och metoder. Du kan bara utelämna parametrar när du anropar.
Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden MethodInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom metoderna för klassbegränsningen eller metoderna Object för om det inte finns någon klassbegränsning.
Note
Parametern name kan inte innehålla typargument. C#-koden GetMethod("MyGenericMethod<int>") söker till exempel efter en metod med textnamnet "MyGenericMethod<int>", i stället för en metod med namnet MyGenericMethod som har ett allmänt argument av typen int. Använd GetMethod("MyGenericMethod") i stället med lämplig parameter i matrisen types .
Se även
- MethodInfo
- DefaultBinder
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Gäller för
GetMethod(String, BindingFlags)
Söker efter den angivna metoden med de angivna bindningsbegränsningarna.
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public System.Reflection.MethodInfo GetMethod(string name, System.Reflection.BindingFlags bindingAttr);
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
Parametrar
- name
- String
Strängen som innehåller namnet på den metod som ska hämtas.
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera null.
Returer
Ett objekt som representerar metoden som matchar de angivna kraven, om det hittas; annars . null
Implementeringar
Undantag
Mer än en metod hittas med det angivna namnet och matchar de angivna bindningsbegränsningarna.
name är null.
Exempel
I följande exempel hämtas metoden som matchar de angivna bindningsflaggorna.
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
Kommentarer
Följande BindingFlags filterflaggor kan användas för att definiera vilka metoder som ska ingå i sökningen:
Du måste ange antingen BindingFlags.Instance eller BindingFlags.Static för att få en retur.
Ange BindingFlags.Public att offentliga metoder ska inkluderas i sökningen.
Ange BindingFlags.NonPublic att icke-offentliga metoder (dvs. privata, interna och skyddade metoder) ska inkluderas i sökningen.
Ange BindingFlags.FlattenHierarchy att inkludera
publicochprotectedstatiska medlemmar i hierarkin.privateStatiska medlemmar i ärvda klasser ingår inte.
Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:
BindingFlags.IgnoreCase för att ignorera fallet
namemed .BindingFlags.DeclaredOnly om du bara vill söka efter de metoder som deklarerats på Type, inte metoder som helt enkelt ärvts.
Mer information finns i System.Reflection.BindingFlags.
Om en metod är överbelastad och mer än en överlagring uppfyller de begränsningar som anges av bindingAttr argumentet genererar metoden ett AmbiguousMatchException undantag. I följande exempel utlöses ett undantag eftersom:
Typen
TestClasshar två offentliga instansöverlagringar avDisplayValuemetoden ochDisplayValue(String)DisplayValue(String, Object[]).Typen
TestClasshar två offentliga instansöverlagringar avEqualsmetoden, varav en ärvs från Object:Equals(TestClass)ochEquals(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)
Du kan göra något av följande för att hämta en specifik metod:
Ändra bindningsbegränsningarna. I föregående exempel hämtar
Equals(TestClass)försök att hämta en offentlig instansmetodEqualssom deklareras av typen och som inte ärvs.Anropa en överlagring av GetMethod metoden som innehåller en
typesparameter som definierar typerna av metodens parametrar.GetMethods(BindingFlags) Anropa metoden för att hämta en matris som innehåller alla metoder som tillhör en typ som har de angivna bindningsattributen. Sedan kan du iterera den för att identifiera dubblettmetoderna med namnet
name. Den här metoden illustreras i föregående exempels hanterare för AmbiguousMatchException undantaget.
Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden MethodInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom metoderna för klassbegränsningen eller metoderna Object för om det inte finns någon klassbegränsning.
Note
För generiska metoder ska du inte ta med typargumenten i name. C#-koden GetMember("MyMethod<int>") söker till exempel efter en medlem med textnamnet "MyMethod<int>", i stället för en metod med namnet MyMethod som har ett allmänt argument av typen int.
Se även
- MethodInfo
- String
- BindingFlags
- DefaultBinder
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()
Gäller för
GetMethod(String)
Söker efter den offentliga metoden med det angivna namnet.
public:
virtual System::Reflection::MethodInfo ^ GetMethod(System::String ^ name);
public:
System::Reflection::MethodInfo ^ GetMethod(System::String ^ name);
public System.Reflection.MethodInfo GetMethod(string name);
abstract member GetMethod : string -> System.Reflection.MethodInfo
override this.GetMethod : string -> System.Reflection.MethodInfo
member this.GetMethod : string -> System.Reflection.MethodInfo
Public Function GetMethod (name As String) As MethodInfo
Parametrar
- name
- String
Strängen som innehåller namnet på den offentliga metoden som ska hämtas.
Returer
Ett objekt som representerar den offentliga metoden med det angivna namnet, om det hittas. annars . null
Implementeringar
Undantag
Mer än en metod hittas med det angivna namnet.
name är null.
Exempel
I följande exempel hämtas en metod med namnet 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
Kommentarer
Sökningen efter name är skiftlägeskänslig. Sökningen innehåller offentliga metoder för statiska och offentliga instanser.
Om en metod är överbelastad och har mer än en offentlig metod GetMethod(String) genererar metoden ett AmbiguousMatchException undantag. I följande exempel utlöses ett undantag eftersom det finns mer än en offentlig överbelastning av Int32.ToString metoden. Å andra sidan kan metoden hämta objektet eftersom Person.ToString metoden åsidosätter Object.ToString och därför inte är överbelastadGetMethod(String).MethodInfo
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.
Du kan göra något av följande för att hämta en specifik metod:
GetMethod(String, BindingFlags) Anropa metoden och ange ett
bindingAttrargument som unikt identifierar metoden. Om undantaget till exempel utlöses på grund av att en typ har en statisk och en instansöverlagring kan du ange ettbindingAttrargument för BindingFlags.Static eller BindingFlags.Instance.Anropa en överlagring av GetMethod metoden som innehåller en
typesparameter som definierar typerna av metodens parametrar.GetMethods() Anropa metoden för att hämta en matris som innehåller alla offentliga metoder som hör till en typ. Sedan kan du iterera den för att identifiera dubblettmetoderna med namnet
name.
Om den aktuella Type representerar en konstruerad generisk typ returnerar den här metoden MethodInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom metoderna för klassbegränsningen eller metoderna Object för om det inte finns någon klassbegränsning.
Note
För generiska metoder ska du inte ta med typargumenten i name. C#-koden GetMember("MyMethod<int>") söker till exempel efter en medlem med textnamnet "MyMethod<int>", i stället för en metod med namnet MyMethod som har ett allmänt argument av typen int.
Se även
- MethodInfo
- String
- DefaultBinder
- GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
- GetMethods()