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í
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 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. |
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í.
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.
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.PublicOr
BindingFlags.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.StaticOr
BindingFlags.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é
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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 sBindingFlags.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 konstruktoryBindingFlags.Public
instance aBindingFlags.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é
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])