Type.GetConstructors Metódus

Definíció

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 BindingFlagshasználatával.

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

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

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

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.Static az osztály inicializálójának (statikus konstruktornak) a lekérését BindingFlags.NonPublic is. Az osztály inicializálója a TypeInitializer tulajdonság használatával is lekérhető.

  • Adja meg BindingFlags.Instance a példánykonstruktorok egyikét vagy mindkettőt BindingFlags.Public , és BindingFlags.NonPublic ké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

A következőre érvényes: