Sdílet prostřednictvím


Type.GetConstructors Metoda

Definice

Získá konstruktory aktuálního Type.

Přetížení

Name Description
GetConstructors()

Vrátí všechny veřejné konstruktory definované pro aktuální Type.

GetConstructors(BindingFlags)

Při přepsání v odvozené třídě vyhledá konstruktory definované pro aktuální Type, pomocí zadané BindingFlags.

Příklady

Tento příklad ukazuje výstup GetConstructors() přetížení z třídy, která má dva konstruktory instance a jeden statický 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

Výstupem tohoto kódu je:

2
False
False

Vzhledem k tomu, GetConstructors že přetížení používá pouze Public a Instance, statický konstruktor není počítáno výrazem for ani vyhodnoceno .IsStatic

Chcete-li najít statické konstruktory, použijte GetConstructors přetížení a předejte ji kombinaci (logické OR) z BindingFlags.Public, BindingFlags.StaticBindingFlags.NonPublic, , BindingFlags.Instance, jak je znázorněno v následujícím příkladu kódu:

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

Teď je výstup následující:

3
False
True
False

GetConstructors()

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Vrátí všechny veřejné konstruktory definované pro aktuální Type.

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()

Návraty

Pole ConstructorInfo objektů představujících všechny konstruktory veřejné instance definované pro aktuální Type, ale nezahrnuje inicializátor typu (statický konstruktor). Pokud nejsou definovány žádné veřejné instance konstruktory pro aktuální Type, nebo pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, je vrácena prázdná pole typu ConstructorInfo .

Implementuje

Atributy

Poznámky

V .NET 6 a starších verzích GetConstructors metoda nevrací konstruktory v určitém pořadí, například pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém se vrátí konstruktory, protože se toto pořadí liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při reflexi typu.

Typ členu Statický. Nestatické
Konstruktor Ne Ne
Pole Ne Ano. Pole se vždy skryje podle názvu a signatury.
Zvláštní událost Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
Metoda Ne Ano. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu.
Vnořený typ Ne Ne
Vlastnictví Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
  1. Funkce skrytí podle jména a podpisu zohledňuje všechny části podpisu, včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.

  2. Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.

  3. Vlastní atributy nejsou součástí systému běžných typů.

Toto přetížení metody volá GetConstructors(BindingFlags) přetížení metody s | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOrBindingFlags.Instance v jazyce Visual Basic). Nenajde inicializátory třídy (statický konstruktor). Chcete-li najít inicializátory třídy, použijte přetížení, které přebírá BindingFlagsa určuje | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic v jazyce Visual Basic). Inicializátor třídy můžete také získat pomocí TypeInitializer vlastnosti.

Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí ConstructorInfo objekty s parametry typu nahrazené příslušnými argumenty typu. Pokud má například třída konstruktor ( v jazyce Visual Basic), volání GetConstructors na C<int> vrátí ConstructorInfo hodnotu, která představuje C(int t1) v jazyce C# (Sub New(ByVal t1 As Integer) v jazyce Visual Basic).Sub New(ByVal t1 As T)C(T t1)C<T>

Pokud aktuální Type představuje parametr obecného typu, GetConstructors vrátí metoda prázdné pole.

Viz také

Platí pro

GetConstructors(BindingFlags)

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Při přepsání v odvozené třídě vyhledá konstruktory definované pro aktuální Type, pomocí zadané BindingFlags.

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()

Parametry

bindingAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují způsob provedení hledání.

nebo

Default pro vrácení prázdného pole.

Návraty

Pole ConstructorInfo objektů představujících všechny konstruktory definované pro aktuální Type , které odpovídají zadaným omezením vazby, včetně inicializátoru typu, pokud je definován. Vrátí prázdnou matici typu ConstructorInfo , pokud nejsou definovány žádné konstruktory pro aktuální Type, pokud žádný z definovaných konstruktorů neodpovídá omezením vazby nebo pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody.

Implementuje

Atributy

Poznámky

bindingAttr lze použít k určení, zda se mají vrátit pouze veřejné konstruktory nebo veřejné i neveřejné konstruktory.

BindingFlags Následující příznaky filtru lze použít k definování konstruktorů, které mají být zahrnuty do vyhledávání:

  • Zadejte BindingFlags.Static spolu s BindingFlags.NonPublic tím, jak načíst inicializátor třídy (statický konstruktor). Inicializátor třídy můžete také získat pomocí TypeInitializer vlastnosti.

  • Zadejte BindingFlags.Instance spolu s jedním nebo oběma BindingFlags.Public z nich a BindingFlags.NonPublic pro načtení konstruktorů instancí.

Další informace naleznete na System.Reflection.BindingFlags.

V .NET 6 a starších verzích GetConstructors metoda nevrací konstruktory v určitém pořadí, například pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém se vrátí konstruktory, protože se toto pořadí liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí ConstructorInfo objekty s parametry typu nahrazené příslušnými argumenty typu. Pokud má například třída konstruktor ( v jazyce Visual Basic), volání GetConstructors na C<int> vrátí ConstructorInfo hodnotu, která představuje C(int t1) v jazyce C# (Sub New(ByVal t1 As Integer) v jazyce Visual Basic).Sub New(ByVal t1 As T)C(T t1)C<T>

Pokud aktuální Type představuje parametr obecného typu, GetConstructors vrátí metoda prázdné pole.

Viz také

Platí pro