Type.GetConstructors Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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é |
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. |
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í.
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.
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é
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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.Staticspolu sBindingFlags.NonPublictím, jak načíst inicializátor třídy (statický konstruktor). Inicializátor třídy můžete také získat pomocí TypeInitializer vlastnosti.Zadejte
BindingFlags.Instancespolu s jedním nebo oběmaBindingFlags.Publicz nich aBindingFlags.NonPublicpro 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é
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])