Type.GetConstructors Methode

Definitie

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 BindingFlags.

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.
  1. 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.

  2. 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.

  3. 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

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.Static samen op BindingFlags.NonPublic om de klasse-initialisatiefunctie (statische constructor) op te halen. U kunt de klasse-initializer ook ophalen met behulp van de TypeInitializer eigenschap.

  • Geef BindingFlags.Instance samen met een of beide BindingFlags.Public exemplaren op en BindingFlags.NonPublic om 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

Van toepassing op