Type.GetConstructors Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lekéri az aktuális Typekonstruktorokat.
Túlterhelések
| Name | Description |
|---|---|
| GetConstructors() |
Az aktuálishoz Typedefiniált összes nyilvános konstruktort adja vissza. |
| GetConstructors(BindingFlags) |
Ha egy származtatott osztályban felül van bírálva, megkeresi az aktuálishoz Typedefiniált konstruktorokat a megadott |
Példák
Ez a példa egy kétpéldányos konstruktort és egy statikus konstruktort tartalmazó osztály túlterhelésének GetConstructors() kimenetét mutatja be.
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
A kód kimenete a következő:
2
False
False
Mivel a GetConstructors túlterhelés csak Public a függvényt használja, és Instancea statikus konstruktort sem a kifejezés, sem a for kiértékelés nem számítja IsStaticki.
Statikus konstruktorok kereséséhez használja a GetConstructors túlterhelést, és adja át a ( logikai BindingFlags.PublicBindingFlags.StaticBindingFlags.NonPublicVAGY) kombinációtBindingFlags.Instance, ahogyan az a következő kód példájában látható:
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
Most a kimenet a következő:
3
False
True
False
GetConstructors()
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Az aktuálishoz Typedefiniált összes nyilvános konstruktort adja vissza.
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()
Válaszok
Az aktuálishoz ConstructorInfodefiniált összes nyilvánospéldány-konstruktort képviselő objektumtömbType, de a típus inicializálóját (statikus konstruktort) nem. Ha az aktuálishoz Typenincs meghatározva nyilvános példány-konstruktor, vagy ha az aktuális Type típusparamétert jelöl egy általános típus vagy általános metódus definíciójában, a rendszer üres típustömböt ConstructorInfo ad vissza.
Megvalósítás
- Attribútumok
Megjegyzések
A .NET 6-os és korábbi verzióiban a GetConstructors metódus nem ad vissza konstruktorokat egy adott sorrendben, például deklarációs sorrendben. A kód nem függ a konstruktorok visszaadott sorrendjétől, mert ez a sorrend eltérő. A 7. .NET kezdve azonban a rendezés determinisztikus a szerelvény metaadatainak sorrendje alapján.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Esemény | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Ingatlan | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
Az egyéni attribútumok nem részei a gyakori típusrendszernek.
Ez a metódus túlterhelés a GetConstructors(BindingFlags) metódus túlterhelését hívja meg, BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance Visual Basic). Nem talál osztály inicializálókat (statikus konstruktort). Osztály inicializálók kereséséhez használjon túlterhelést, amely BindingFlags, és adja meg a BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic Visual Basic). Az osztály inicializálója a TypeInitializer tulajdonság használatával is lekérhető.
Ha az áram Type egy konstruktált általános típust jelöl, ez a metódus az ConstructorInfo objektumokat a megfelelő típusargumentumokkal helyettesített típusparaméterekkel adja vissza. Például: ha a C<T> osztály konstruktort C(T t1) (Sub New(ByVal t1 As T) Visual Basic), hívja meg GetConstructors a C<int> egy ConstructorInfo ad vissza, amely a C# C(int t1) (Sub New(ByVal t1 As Integer) Visual Basic) értékét jelöli.
Ha az aktuális Type érték egy általános típusparamétert jelöl, a GetConstructors metódus egy üres tömböt ad vissza.
Lásd még
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
A következőre érvényes:
GetConstructors(BindingFlags)
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Ha egy származtatott osztályban felül van bírálva, megkeresi az aktuálishoz Typedefiniált konstruktorokat a megadott BindingFlagshasználatával.
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()
Paraméterek
- bindingAttr
- BindingFlags
A számbavételi értékek bitenkénti kombinációja, amely meghatározza a keresés menetét.
-vagy-
Default üres tömb visszaadásához.
Válaszok
Az aktuálishoz ConstructorInfo definiált összes konstruktort képviselő objektumtömbType, amely megfelel a megadott kötési korlátozásoknak, beleértve a típus inicializálóját is, ha meg van adva. Üres típusú ConstructorInfo tömböt ad vissza, ha az aktuálishoz Typenincsenek konstruktorok definiálva, ha egyik konstruktor sem felel meg a kötési korlátozásoknak, vagy ha az áram Type egy típusparamétert jelöl egy általános típus vagy általános metódus definíciójában.
Megvalósítás
- Attribútumok
Megjegyzések
bindingAttr segítségével megadhatja, hogy csak nyilvános konstruktorokat, illetve nyilvános és nem nyilvános konstruktorokat adjon vissza.
A következő BindingFlags szűrőjelölők segítségével határozhatja meg, hogy mely konstruktorokat vegye fel a keresésbe:
Adja meg
BindingFlags.Staticaz osztály inicializálójának (statikus konstruktornak) a lekérésétBindingFlags.NonPublicis. Az osztály inicializálója a TypeInitializer tulajdonság használatával is lekérhető.Adja meg
BindingFlags.Instancea példánykonstruktorok egyikét vagy mindkettőtBindingFlags.Public, ésBindingFlags.NonPublickérje le a példánykonstruktorokat.
További információért lásd a System.Reflection.BindingFlags jelű részt.
A .NET 6-os és korábbi verzióiban a GetConstructors metódus nem ad vissza konstruktorokat egy adott sorrendben, például deklarációs sorrendben. A kód nem függ a konstruktorok visszaadott sorrendjétől, mert ez a sorrend eltérő. A 7. .NET kezdve azonban a rendezés determinisztikus a szerelvény metaadatainak sorrendje alapján.
Ha az áram Type egy konstruktált általános típust jelöl, ez a metódus az ConstructorInfo objektumokat a megfelelő típusargumentumokkal helyettesített típusparaméterekkel adja vissza. Például: ha a C<T> osztály konstruktort C(T t1) (Sub New(ByVal t1 As T) Visual Basic), hívja meg GetConstructors a C<int> egy ConstructorInfo ad vissza, amely a C# C(int t1) (Sub New(ByVal t1 As Integer) Visual Basic) értékét jelöli.
Ha az aktuális Type érték egy általános típusparamétert jelöl, a GetConstructors metódus egy üres tömböt ad vissza.
Lásd még
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])