Type.GetConstructors Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Haalt de constructors van de huidige Typeop.
Overloads
| Name | Description |
|---|---|
| GetConstructors() |
Retourneert alle openbare constructors die zijn gedefinieerd voor de huidige Type. |
| GetConstructors(BindingFlags) |
Wanneer deze wordt overschreven in een afgeleide klasse, zoekt u naar de constructors die zijn gedefinieerd voor de huidige Type, met behulp van de opgegeven |
Voorbeelden
In dit voorbeeld ziet u de uitvoer van de GetConstructors() overbelasting van een klasse met twee exemplaarconstructors en één statische constructor.
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
De uitvoer van deze code is:
2
False
False
Omdat de GetConstructors overbelasting alleen Public wordt gebruikt en Instance, wordt de statische constructor niet meegeteld door de for expressie of geëvalueerd door IsStatic.
Als u statische constructors wilt zoeken, gebruikt u de GetConstructors overbelasting en geeft u deze door aan de combinatie (logische OF) van BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instancezoals wordt weergegeven in het volgende codevoorbeeld:
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 is de uitvoer:
3
False
True
False
GetConstructors()
Retourneert alle openbare constructors die zijn gedefinieerd voor de huidige Type.
public:
virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors();
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[]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()
Retouren
Een matrix met ConstructorInfo objecten die alle constructors van het openbare exemplaar vertegenwoordigen die zijn gedefinieerd voor de huidige Type, maar niet inclusief de type initialisatiefunctie (statische constructor). Als er geen constructors voor openbare exemplaren zijn gedefinieerd voor de huidige Type, of als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, wordt een lege matrix van het type ConstructorInfo geretourneerd.
Implementeringen
- Kenmerken
Opmerkingen
In .NET 6 en eerdere versies retourneert de methode GetConstructors geen constructors in een bepaalde volgorde, zoals declaratievolgorde. Uw code mag niet afhankelijk zijn van de volgorde waarin constructors worden geretourneerd, omdat die volgorde varieert. Vanaf .NET 7 is de volgorde echter deterministisch op basis van de volgorde van metagegevens in de assembly.
In de volgende tabel ziet u welke leden van een basisklasse worden geretourneerd door de Get methoden bij het weergeven van een type.
| Lidmaatschapssoort | Static | Niet-statisch |
|---|---|---|
| Constructeur | No | No |
| Veld | No | Ja. Een veld wordt altijd verborgen op basis van naam en kenmerk. |
| Event | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
| Methode | No | Ja. Een methode (zowel virtueel als niet-virtueel) kan worden verborgen op basis van naam of op basis van naam en handtekening. |
| Geneste type | No | No |
| Property | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
Hide-by-name-and-signature beschouwt alle onderdelen van de handtekening, waaronder aangepaste modifiers, retourtypen, parametertypen, sentinels en onbeheerde aanroepconventies. Dit is een binaire vergelijking.
Voor reflectie worden eigenschappen en gebeurtenissen verborgen op basis van naam en signatuur. Als u een eigenschap hebt met zowel een get als een set accessor in de basisklasse, maar de afgeleide klasse alleen een get-accessor heeft, verbergt de eigenschap afgeleide klasse de eigenschap basisklasse en hebt u geen toegang tot de setter op de basisklasse.
Aangepaste kenmerken maken geen deel uit van het algemene typesysteem.
Met deze methode wordt de GetConstructors(BindingFlags) methode overbelast, met BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). Er worden geen klasse-initializers (statische constructor) gevonden. Als u klasse-initializers wilt vinden, gebruikt u een overbelasting die BindingFlags gebruikt en geeft u BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). U kunt de klasse-initializer ook ophalen met behulp van de TypeInitializer eigenschap.
Als de huidige Type een samengesteld algemeen type vertegenwoordigt, retourneert deze methode de ConstructorInfo objecten door de typeparameters vervangen door de juiste typeargumenten. Bijvoorbeeld: als klasse C<T> een constructor heeft C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), roept u GetConstructors op C<int> retourneert een ConstructorInfo die C(int t1) in C# vertegenwoordigt (Sub New(ByVal t1 As Integer) in Visual Basic).
Als de huidige Type een algemene typeparameter vertegenwoordigt, retourneert de GetConstructors methode een lege matrix.
Zie ook
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Van toepassing op
GetConstructors(BindingFlags)
Wanneer deze wordt overschreven in een afgeleide klasse, zoekt u naar de constructors die zijn gedefinieerd voor de huidige Type, met behulp van de opgegeven BindingFlags.
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()
Parameters
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om een lege matrix te retourneren.
Retouren
Een matrix van ConstructorInfo objecten die alle constructors vertegenwoordigen die zijn gedefinieerd voor de huidige Type die overeenkomen met de opgegeven bindingsbeperkingen, inclusief de type-initialisatiefunctie als deze is gedefinieerd. Retourneert een lege matrix van het type ConstructorInfo als er geen constructors zijn gedefinieerd voor de huidige Type, als geen van de gedefinieerde constructors overeenkomt met de bindingsbeperkingen of als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode.
Implementeringen
- Kenmerken
Opmerkingen
bindingAttr kan worden gebruikt om op te geven of alleen openbare constructors of zowel openbare als niet-openbare constructors moeten worden geretourneerd.
De volgende BindingFlags filtervlagmen kunnen worden gebruikt om te definiëren welke constructors moeten worden opgenomen in de zoekopdracht:
Geef
BindingFlags.Staticsamen opBindingFlags.NonPublicom de klasse-initialisatiefunctie (statische constructor) op te halen. U kunt de klasse-initializer ook ophalen met behulp van de TypeInitializer eigenschap.Geef
BindingFlags.Instancesamen met een of beideBindingFlags.Publicexemplaren op enBindingFlags.NonPublicom exemplaarconstructors op te halen.
Zie System.Reflection.BindingFlags voor meer informatie.
In .NET 6 en eerdere versies retourneert de methode GetConstructors geen constructors in een bepaalde volgorde, zoals declaratievolgorde. Uw code mag niet afhankelijk zijn van de volgorde waarin constructors worden geretourneerd, omdat die volgorde varieert. Vanaf .NET 7 is de volgorde echter deterministisch op basis van de volgorde van metagegevens in de assembly.
Als de huidige Type een samengesteld algemeen type vertegenwoordigt, retourneert deze methode de ConstructorInfo objecten door de typeparameters vervangen door de juiste typeargumenten. Bijvoorbeeld: als klasse C<T> een constructor heeft C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), roept u GetConstructors op C<int> retourneert een ConstructorInfo die C(int t1) in C# vertegenwoordigt (Sub New(ByVal t1 As Integer) in Visual Basic).
Als de huidige Type een algemene typeparameter vertegenwoordigt, retourneert de GetConstructors methode een lege matrix.
Zie ook
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])