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 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 |
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 IsStatic
ausgewertet.
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. |
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.
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.
Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.
Diese Methodenüberladung ruft die GetConstructors(BindingFlags) Methodenüberladung mit | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOr
BindingFlags.Instance in Visual Basic) auf. Klasseninitialisierer (statischer Konstruktor) werden nicht gefunden. Verwenden Sie zum Suchen nach Klasseninitialisierern eine Überladung, die akzeptiert BindingFlagsund (Or
BindingFlags.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
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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 mitBindingFlags.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 vonBindingFlags.Public
undBindingFlags.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
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])