Type.GetMethod Metod

Definition

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.

types är flerdimensionellt.

-eller-

modifiers är flerdimensionellt.

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.
  1. 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.

  2. 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.

  3. 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.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 public och protected statiska medlemmar i hierarkin. private Statiska 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.

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

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.

types är flerdimensionellt.

-eller-

modifiers är flerdimensionellt.

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.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 public och protected statiska medlemmar i hierarkin. private Statiska 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.

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

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.

types är flerdimensionellt.

-eller-

modifiers är flerdimensionellt.

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

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

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:

Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:

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 TestClass har två offentliga instansöverlagringar av DisplayValue metoden och DisplayValue(String)DisplayValue(String, Object[]).

  • Typen TestClass har två offentliga instansöverlagringar av Equals metoden, varav en ärvs från Object: Equals(TestClass) och Equals(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 instansmetod Equals som deklareras av typen och som inte ärvs.

  • Anropa en överlagring av GetMethod metoden som innehåller en types parameter 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

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 bindingAttr argument 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 ett bindingAttr argument för BindingFlags.Static eller BindingFlags.Instance.

  • Anropa en överlagring av GetMethod metoden som innehåller en types parameter 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

Gäller för