Freigeben über


Type.GetConstructors Methode

Definition

Ruft die Konstruktoren der aktuellen Typeab.

Überlädt

Name Beschreibung
GetConstructors()

Gibt alle für die aktuellen TypeKonstruktoren definierten öffentlichen Konstruktoren zurück.

GetConstructors(BindingFlags)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird mithilfe der angegebenen TypeKlasse nach den für den aktuellen BindingFlagsKonstruktor definierten Konstruktoren gesucht.

Beispiele

Dieses Beispiel zeigt die Ausgabe der GetConstructors() Überladung aus einer Klasse mit zwei Instanzkonstruktoren und einem statischen 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

Die Ausgabe dieses Codes lautet:

2
False
False

Da die GetConstructors Überladung nur Public verwendet wird und Instanceder statische Konstruktor weder vom for Ausdruck gezählt noch von IsStatic.

Um statische Konstruktoren zu finden, verwenden Sie die GetConstructors Überladung, und übergeben Sie sie an die Kombination (logisches ODER) von BindingFlags.Public, BindingFlags.Static, , BindingFlags.NonPublic, BindingFlags.Instancewie im folgenden Codebeispiel gezeigt:

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

Jetzt lautet die Ausgabe:

3
False
True
False

GetConstructors()

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Gibt alle für die aktuellen TypeKonstruktoren definierten öffentlichen Konstruktoren zurück.

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()

Gibt zurück

Ein Array von ConstructorInfo Objekten, die alle öffentlichen Instanzkonstruktoren darstellen, die für den aktuellen Type, jedoch nicht den Typinitialisierer (statischer Konstruktor) definiert sind. Wenn keine öffentlichen Instanzkonstruktoren für den aktuellen TypeTyp definiert sind oder wenn der Aktuelle Type einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, wird ein leeres Array vom Typ ConstructorInfo zurückgegeben.

Implementiert

Attribute

Hinweise

In .NET 6 und früheren Versionen gibt die GetConstructors Methode keine Konstruktoren in einer bestimmten Reihenfolge zurück, z. B. Deklarationsreihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Konstruktoren zurückgegeben werden, da diese Reihenfolge unterschiedlich ist. Ab .NET 7 ist die Sortierung jedoch auf der Grundlage der Metadatenbestellung in der Assembly deterministisch.

Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Get Methoden zurückgegeben werden, wenn sie einen Typ widerspiegeln.

Mitgliedertyp Statisch Nicht statisch
Konstruktor No No
Feld No Ja. Ein Feld ist immer hide-by-name-and-signature.
Ereignis Nicht anwendbar Die allgemeine Typsystemregel besteht darin, dass die Vererbung mit der der Methode identisch ist, die die Eigenschaft implementiert. Reflection behandelt Eigenschaften als Hide-by-Name-and-Signature. Siehe Hinweis 2 unten.
Methode No Ja. Eine Methode (sowohl virtuell als auch nicht-virtuell) kann Hide-by-name oder Hide-by-name-and-signature sein.
Geschachtelter Typ No No
Eigentum Nicht anwendbar Die allgemeine Typsystemregel besteht darin, dass die Vererbung mit der der Methode identisch ist, die die Eigenschaft implementiert. Reflection behandelt Eigenschaften als Hide-by-Name-and-Signature. Siehe Hinweis 2 unten.
  1. Hide-by-name-and-signature berücksichtigt alle Elemente der Signatur, einschließlich angepasste Modifikatoren, Rückgabetypen, Parametertypen, Sentinels und nicht verwaltete Aufrufkonventionen. Dies ist ein binärer Vergleich.

  2. Bei der Reflection sind Eigenschaften und Ereignisse Hide-by-Name-and-Signature. Wenn Sie über eine Eigenschaft mit einem Get- und einem Set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen Get-Accessor verfügt, blendet die abgeleitete Klasseneigenschaft die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter der Basisklasse zugreifen.

  3. Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.

Diese Methodenüberladung ruft die GetConstructors(BindingFlags) Methodenüberladung mit | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOrBindingFlags.Instance in Visual Basic) auf. Es werden keine Klasseninitialisierer (statischer Konstruktor) gefunden. Um Klasseninitialisierer zu finden, verwenden Sie eine Überladung, die verwendet BindingFlagswird, und geben Sie (OrBindingFlags.NonPublicBindingFlags.Static in Visual Basic) an.BindingFlags.Static | BindingFlags.NonPublic Sie können den Klasseninitialisierer auch mit der TypeInitializer Eigenschaft abrufen.

Wenn der aktuelle Typ einen konstruierten generischen Type Typ darstellt, gibt diese Methode die ConstructorInfo Objekte mit den Typparametern zurück, die durch die entsprechenden Typargumente ersetzt werden. Wenn die Klasse C<T> z. B. über einen Konstruktor C(T t1) (Sub New(ByVal t1 As T)in Visual Basic) verfügt, wird durch C<int> Aufrufen GetConstructors eines ConstructorInfo Werts C(int t1) zurückgegeben, der in C# (Sub New(ByVal t1 As Integer) in Visual Basic) darstellt.

Wenn der aktuelle Parameter einen generischen Type Typparameter darstellt, gibt die GetConstructors Methode ein leeres Array zurück.

Weitere Informationen

Gilt für:

GetConstructors(BindingFlags)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird mithilfe der angegebenen TypeKlasse nach den für den aktuellen BindingFlagsKonstruktor definierten Konstruktoren gesucht.

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()

Parameter

bindingAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.

- oder -

Default um ein leeres Array zurückzugeben.

Gibt zurück

Ein Array von ConstructorInfo Objekten, die alle für den aktuellen Type Konstruktor definierten Konstruktoren darstellen, die den angegebenen Bindungseinschränkungen entsprechen, einschließlich des Typinitialisierers, wenn er definiert ist. Gibt ein leeres Array vom Typ ConstructorInfo zurück, wenn keine Konstruktoren für den aktuellen TypeDefinierten definiert sind, wenn keiner der definierten Konstruktoren mit den Bindungseinschränkungen übereinstimmt oder wenn der aktuelle Type Parameter einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt.

Implementiert

Attribute

Hinweise

bindingAttr kann verwendet werden, um anzugeben, ob nur öffentliche Konstruktoren oder öffentliche und nicht öffentliche Konstruktoren zurückgegeben werden sollen.

Die folgenden BindingFlags Filterkennzeichnungen können verwendet werden, um zu definieren, welche Konstruktoren in die Suche einbezogen werden sollen:

  • Geben Sie BindingFlags.Static zusammen mit BindingFlags.NonPublic dem Klasseninitialisierer (statischer Konstruktor) an. Sie können den Klasseninitialisierer auch mit der TypeInitializer Eigenschaft abrufen.

  • Geben Sie BindingFlags.Instance zusammen mit einem oder beiden BindingFlags.Public Instanzenkonstruktoren an, und BindingFlags.NonPublic rufen Sie Instanzkonstruktoren ab.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

In .NET 6 und früheren Versionen gibt die GetConstructors Methode keine Konstruktoren in einer bestimmten Reihenfolge zurück, z. B. Deklarationsreihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Konstruktoren zurückgegeben werden, da diese Reihenfolge unterschiedlich ist. Ab .NET 7 ist die Sortierung jedoch auf der Grundlage der Metadatenbestellung in der Assembly deterministisch.

Wenn der aktuelle Typ einen konstruierten generischen Type Typ darstellt, gibt diese Methode die ConstructorInfo Objekte mit den Typparametern zurück, die durch die entsprechenden Typargumente ersetzt werden. Wenn die Klasse C<T> z. B. über einen Konstruktor C(T t1) (Sub New(ByVal t1 As T)in Visual Basic) verfügt, wird durch C<int> Aufrufen GetConstructors eines ConstructorInfo Werts C(int t1) zurückgegeben, der in C# (Sub New(ByVal t1 As Integer) in Visual Basic) darstellt.

Wenn der aktuelle Parameter einen generischen Type Typparameter darstellt, gibt die GetConstructors Methode ein leeres Array zurück.

Weitere Informationen

Gilt für: