Type.GetConstructors Metod

Definition

Hämtar konstruktorerna för den aktuella Type.

Överlagringar

Name Description
GetConstructors()

Returnerar alla offentliga konstruktorer som definierats för den aktuella Type.

GetConstructors(BindingFlags)

När åsidosättas i en härledd klass söker efter konstruktorerna som definierats för den aktuella Type, med hjälp av den angivna BindingFlags.

Exempel

Det här exemplet visar utdata från överbelastningen GetConstructors() från en klass som har två instanskonstruktorer och en statisk konstruktor.

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors();
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
type t() =
    static do ()
    new(i: int) = t ()

let p = typeof<t>.GetConstructors()
printfn $"{p.Length}"

for c in p do
    printfn $"{c.IsStatic}"
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(t).GetConstructors()
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Kodens utdata är:

2
False
False

Eftersom överlagringen GetConstructors endast Public använder och Instanceräknas den statiska konstruktorn varken av for uttrycket eller utvärderas av IsStatic.

Om du vill hitta statiska konstruktorer använder du överlagringen GetConstructors och skickar den kombinationen (logisk OR) av BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, enligt följande kodexempel:

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
open System.Reflection

type t() =
    static do ()
    new (i: int) = t ()

let p = typeof<t>.GetConstructors(BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"{p.Length}"

for c in p do
    printfn $"{c.IsStatic}"
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
           BindingFlags.Public Or _
           BindingFlags.Static Or _
           BindingFlags.NonPublic Or _
           BindingFlags.Instance)
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Nu är utdata:

3
False
True
False

GetConstructors()

Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs

Returnerar alla offentliga konstruktorer som definierats för den aktuella Type.

public:
 cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public System.Reflection.ConstructorInfo[] GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()

Returer

En matris med ConstructorInfo objekt som representerar alla offentliga instanskonstruktorer som definierats för den aktuella Type, men som inte inkluderar typinitieraren (statisk konstruktor). Om inga offentliga instanskonstruktorer har definierats för den aktuella Type, eller om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod, returneras en tom matris av typen ConstructorInfo .

Implementeringar

Attribut

Kommentarer

I .NET 6 och tidigare versioner returnerar metoden GetConstructors inte konstruktorer i en viss ordning, till exempel deklarationsordning. Koden får inte vara beroende av i vilken ordning konstruktorerna returneras, eftersom ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.

I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.

Medlemstyp Static Icke-statisk
Constructor No No
Fält No Yes. 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 Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature.
Kapslad typ No No
Fastighet 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.

Den här metoden överbelastar metoden GetConstructors(BindingFlags) med BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance i Visual Basic). Den hittar inte klassinitierare (statisk konstruktor). Om du vill hitta klassinitierare använder du en överlagring som tar BindingFlags och anger BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic i Visual Basic). Du kan också hämta klassinitieraren med hjälp av TypeInitializer egenskapen .

Om strömmen Type representerar en konstruerad allmän typ returnerar den här metoden objekten ConstructorInfo med typparametrarna ersatta av lämpliga typargument. Till exempel om klassen C<T> har en konstruktor C(T t1) (Sub New(ByVal t1 As T) i Visual Basic), anropar GetConstructorsC<int> returnerar en ConstructorInfo som representerar C(int t1) i C# (Sub New(ByVal t1 As Integer) i Visual Basic).

Om strömmen Type representerar en allmän typparameter GetConstructors returnerar metoden en tom matris.

Se även

Gäller för

GetConstructors(BindingFlags)

Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs

När åsidosättas i en härledd klass söker efter konstruktorerna som definierats för den aktuella Type, med hjälp av den angivna BindingFlags.

public:
 abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.ConstructorInfo[] GetConstructors(System.Reflection.BindingFlags bindingAttr);
[System.Runtime.InteropServices.ComVisible(true)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
Public MustOverride Function GetConstructors (bindingAttr As BindingFlags) As ConstructorInfo()

Parametrar

bindingAttr
BindingFlags

En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.

-eller-

Default för att returnera en tom matris.

Returer

En matris med ConstructorInfo objekt som representerar alla konstruktorer som definierats för den aktuella Type som matchar de angivna bindningsbegränsningarna, inklusive typinitieraren om den definieras. Returnerar en tom matris av typen ConstructorInfo om inga konstruktorer har definierats för den aktuella Type, om ingen av de definierade konstruktorerna matchar bindningsbegränsningarna, eller om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod.

Implementeringar

Attribut

Kommentarer

bindingAttr kan användas för att ange om endast offentliga konstruktorer eller både offentliga och icke-offentliga konstruktorer ska returneras.

Följande BindingFlags filterflaggor kan användas för att definiera vilka konstruktorer som ska ingå i sökningen:

  • Ange BindingFlags.Static tillsammans med BindingFlags.NonPublic för att hämta klassinitieraren (statisk konstruktor). Du kan också hämta klassinitieraren med hjälp av TypeInitializer egenskapen .

  • Ange BindingFlags.Instance tillsammans med en eller båda av BindingFlags.Public och BindingFlags.NonPublic för att hämta instanskonstruktorer.

Mer information finns i System.Reflection.BindingFlags.

I .NET 6 och tidigare versioner returnerar metoden GetConstructors inte konstruktorer i en viss ordning, till exempel deklarationsordning. Koden får inte vara beroende av i vilken ordning konstruktorerna returneras, eftersom ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.

Om strömmen Type representerar en konstruerad allmän typ returnerar den här metoden objekten ConstructorInfo med typparametrarna ersatta av lämpliga typargument. Till exempel om klassen C<T> har en konstruktor C(T t1) (Sub New(ByVal t1 As T) i Visual Basic), anropar GetConstructorsC<int> returnerar en ConstructorInfo som representerar C(int t1) i C# (Sub New(ByVal t1 As Integer) i Visual Basic).

Om strömmen Type representerar en allmän typparameter GetConstructors returnerar metoden en tom matris.

Se även

Gäller för