Type.GetConstructors Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 |
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. |
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.
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.
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
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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.Staticzusammen mitBindingFlags.NonPublicdem Klasseninitialisierer (statischer Konstruktor) an. Sie können den Klasseninitialisierer auch mit der TypeInitializer Eigenschaft abrufen.Geben Sie
BindingFlags.Instancezusammen mit einem oder beidenBindingFlags.PublicInstanzenkonstruktoren an, undBindingFlags.NonPublicrufen 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
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])