Type.GetConstructors Methode

Definition

Ruft die Konstruktoren des aktuellen Type ab.

Überlädt

GetConstructors()

Gibt alle öffentlichen Konstruktoren zurück, die für den aktuellen Type definiert sind.

GetConstructors(BindingFlags)

Sucht beim Überschreiben in einer abgeleiteten Klasse unter Verwendung der angegebenen Type die für den aktuellen BindingFlags definierten Konstruktoren.

Beispiele

Dieses Beispiel zeigt die Ausgabe der GetConstructors() Überladung aus einer Klasse, die über zwei instance-Konstruktoren und einen statischen Konstruktor verfügt.

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   static t(){}

   t( int /*i*/ ){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors();
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );

   }
}
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 und Instanceverwendet, wird der statische Konstruktor weder vom for Ausdruck gezählt noch von IsStaticausgewertet.

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

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   t( int /*i*/ ){}

   static t(){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(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 );
   }
}
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

Die Ausgabe lautet nun:

3
False
True
False

GetConstructors()

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

Gibt alle öffentlichen Konstruktoren zurück, die für den aktuellen Type definiert sind.

public:
 cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
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 für den aktuellen Type definierten öffentlichen Instanzkonstruktoren mit Ausnahme des Typinitialisierers (statischer Konstruktor) darstellen. Wenn für den aktuellen Type keine öffentlichen Instanzkonstruktoren definiert sind oder der aktuelle Type einen Typparameter einer generischen Typ- oder Methodendefinition 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 variiert. Ab .NET 7 ist die Reihenfolge jedoch deterministisch, basierend auf der Metadatenreihenfolge in der Assembly.

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

Memberart statischen Nicht statisch
Konstruktor Nein Nein
Feld Nein Ja. Ein Feld wird immer nach Name und Signatur ausgeblendet.
Ereignis Nicht zutreffend Die allgemeine Typsystemregel ist, dass die Vererbung mit der der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als hide-by-name-and-signature. Siehe Hinweis 2 weiter unten.
Methode Nein Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Name oder nach Name und Signatur ausblenden sein.
Geschachtelter Typ Nein Nein
Eigenschaft Nicht zutreffend Die allgemeine Typsystemregel ist, dass die Vererbung mit der der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als hide-by-name-and-signature. Siehe Hinweis 2 weiter unten.
  1. Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwalteter Aufrufkonventionen. Dies ist ein binärer Vergleich.

  2. Für die Reflektion werden Eigenschaften und Ereignisse nach Name und Signatur ausgeblendet. 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 für die 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. Klasseninitialisierer (statischer Konstruktor) werden nicht gefunden. Verwenden Sie zum Suchen nach Klasseninitialisierern eine Überladung, die akzeptiert BindingFlagsund (OrBindingFlags.NonPublicBindingFlags.Static in Visual Basic) angibt.BindingFlags.Static | BindingFlags.NonPublic Sie können den Klasseninitialisierer auch mithilfe der TypeInitializer -Eigenschaft abrufen.

Wenn der aktuelle 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> beispielsweise über einen Konstruktor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic) verfügt, wird durch Aufrufen GetConstructors von C<int> ein ConstructorInfo zurückgegeben, das in C# (Sub New(ByVal t1 As Integer) in Visual Basic) darstelltC(int t1).

Wenn der aktuelle 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

Sucht beim Überschreiben in einer abgeleiteten Klasse unter Verwendung der angegebenen Type die für den aktuellen BindingFlags definierten Konstruktoren.

public:
 abstract cli::array <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);
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, das alle für den aktuellen Type definierten Konstruktor darstellt, die den angegebenen Bindungseinschränkungen entsprechen, einschließlich des Typinitialisierers, sofern definiert. Gibt ein leeres Array vom Typ ConstructorInfo zurück, wenn für den aktuellen Type keine Konstruktoren definiert sind, keiner der definierten Konstruktoren den Bindungseinschränkungen entspricht oder der aktuelle Type einen Typparameter einer generischen Typ- oder Methodendefinition darstellt.

Implementiert

Attribute

Hinweise

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

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

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

  • Geben Sie BindingFlags.Instance zusammen mit einem oder beiden von BindingFlags.Public und BindingFlags.NonPublic an, um instance Konstruktoren abzurufen.

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 variiert. Ab .NET 7 ist die Reihenfolge jedoch deterministisch, basierend auf der Metadatenreihenfolge in der Assembly.

Wenn der aktuelle 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> beispielsweise über einen Konstruktor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic) verfügt, wird durch Aufrufen GetConstructors von C<int> ein ConstructorInfo zurückgegeben, das in C# (Sub New(ByVal t1 As Integer) in Visual Basic) darstelltC(int t1).

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

Weitere Informationen

Gilt für: