Sdílet prostřednictvím


Type.GetConstructors Metoda

Definice

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

Přetížení

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

Výstup tohoto kódu je:

2
False
False

Vzhledem k tomu, že GetConstructors přetížení používá pouze Public a Instance, statický konstruktor se výrazem for ani nevyhodnocuje pomocí IsStatic.

Pokud chcete najít statické konstruktory, použijte GetConstructors přetížení a předejte mu kombinaci (logické OR) , BindingFlags.NonPublicBindingFlags.PublicBindingFlags.StaticBindingFlags.Instancejak je znázorněno v následujícím příkladu kódu:

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

Výstup je teď:

3
False
True
False

GetConstructors()

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

Návraty

Pole ConstructorInfo objektů představující všechny konstruktory veřejné instance definované pro aktuální Type, ale nezahrnuje inicializátor typu (statický konstruktor). Pokud nejsou definovány žádné konstruktory veřejné instance 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í deklarace. Váš kód nesmí záviset na pořadí, ve kterém jsou konstruktory vráceny, protože toto pořadí se liší. Od verze .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 odrazu na typu.

Typ členu Static Nestatický
Konstruktor No No
Pole No Yes. Pole je vždy skrýváno podle názvu a podpisu.
Událost Neuvedeno Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu.
Vnořený typ No No
Vlastnost Neuvedeno Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
  1. Skrývání podle názvu a podpisu bere v úvahu 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 účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.

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

Přetížení této metody volá GetConstructors(BindingFlags) přetížení metody s | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOrBindingFlags.Instance v jazyce Visual Basic). Nenajde inicializátory tříd (statický konstruktor). Pokud chcete najít inicializátory tříd, 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 proud Type představuje konstruovaný obecný typ, vrátí ConstructorInfo tato metoda objekty s parametry typu nahrazené odpovídajícími argumenty typu. Pokud má například třída konstruktor ( v jazyce Visual Basic), vrátí volání GetConstructors on C<int> objektConstructorInfo, 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

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

Parametry

bindingAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují, jak se provádí hledání.

-nebo-

Default a vrátí prázdné pole.

Návraty

Pole ConstructorInfo objektů představující všechny konstruktory definované pro proud 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.

Následující BindingFlags příznaky filtru lze použít k definování konstruktorů, které se mají zahrnout do hledání:

  • Zadejte BindingFlags.Static spolu s BindingFlags.NonPublic , aby se načetl 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 konstruktory BindingFlags.Public instance a BindingFlags.NonPublic pro načtení konstruktorů instance.

Další informace naleznete v tématu 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í deklarace. Váš kód nesmí záviset na pořadí, ve kterém jsou konstruktory vráceny, protože toto pořadí se liší. Od verze .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Pokud proud Type představuje konstruovaný obecný typ, vrátí ConstructorInfo tato metoda objekty s parametry typu nahrazené odpovídajícími argumenty typu. Pokud má například třída konstruktor ( v jazyce Visual Basic), vrátí volání GetConstructors on C<int> objektConstructorInfo, 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