Type.GetConstructors Metoda

Definicja

Pobiera konstruktory bieżącego Typeobiektu .

Przeciążenia

GetConstructors()

Zwraca wszystkie konstruktory publiczne zdefiniowane dla bieżącego Typeelementu .

GetConstructors(BindingFlags)

Po przesłonięciu w klasie pochodnej wyszukuje konstruktory zdefiniowane dla bieżącego Typeelementu , używając określonego BindingFlagselementu .

Przykłady

W tym przykładzie przedstawiono dane wyjściowe GetConstructors() przeciążenia z klasy, która ma dwa konstruktory wystąpień i jeden konstruktor statyczny.

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

Dane wyjściowe tego kodu to:

2
False
False

GetConstructors Ponieważ przeciążenie używa tylko Public wartości i Instance, konstruktor statyczny nie jest liowany przez wyrażenie ani obliczany przez IsStaticmetodę for .

Aby znaleźć konstruktory statyczne, użyj GetConstructors przeciążenia i przekaż ją kombinację (logiczne OR) BindingFlags.Public, , BindingFlags.StaticBindingFlags.NonPublic, BindingFlags.Instancejak pokazano w poniższym przykładzie kodu:

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

Teraz dane wyjściowe to:

3
False
True
False

GetConstructors()

Źródło:
Type.cs
Źródło:
Type.cs
Źródło:
Type.cs

Zwraca wszystkie konstruktory publiczne zdefiniowane dla bieżącego Typeelementu .

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

Zwraca

Tablica ConstructorInfo obiektów reprezentujących wszystkie konstruktory wystąpień publicznych zdefiniowane dla bieżącego Typeelementu , ale nie obejmuje inicjatora typu (konstruktora statycznego). Jeśli nie zdefiniowano żadnych konstruktorów wystąpień publicznych dla bieżącego Typeobiektu lub jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, zwracana jest pusta tablica typu ConstructorInfo .

Implementuje

Atrybuty

Uwagi

W przypadku platformy .NET 6 i starszych wersji GetConstructors metoda nie zwraca konstruktorów w określonej kolejności, takiej jak kolejność deklaracji. Kod nie może zależeć od kolejności zwracania konstruktorów, ponieważ ta kolejność różni się. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.

W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get metody podczas odzwierciedlania typu.

Typ elementu członkowskiego Static Niestatyczna
Konstruktor Nie Nie
Pole Nie Tak. Pole jest zawsze ukryte przez nazwę i podpis.
Zdarzenie Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
Metoda Nie Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis.
Typu zagnieżdżony Nie Nie
Właściwość Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
  1. Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.

  2. W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.

  3. Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.

To przeciążenie metody wywołuje GetConstructors(BindingFlags) przeciążenie metody z BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance w Visual Basic). Nie znajdzie inicjatorów klas (konstruktora statycznego). Aby znaleźć inicjatory klas, użyj przeciążenia, które przyjmuje BindingFlags, i określ BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic w Visual Basic). Możesz również pobrać inicjator klasy przy użyciu TypeInitializer właściwości .

Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca ConstructorInfo obiekty z parametrami typu zastąpionymi przez odpowiednie argumenty typu. Jeśli na przykład klasa C<T> ma konstruktor C(T t1) (Sub New(ByVal t1 As T)w Visual Basic), wywołanie metody GetConstructorsC<int> zwraca wartość reprezentującą C(int t1)ConstructorInfo w języku C# (Sub New(ByVal t1 As Integer) w Visual Basic).

Jeśli bieżący Type reprezentuje ogólny parametr typu, GetConstructors metoda zwraca pustą tablicę.

Zobacz też

Dotyczy

GetConstructors(BindingFlags)

Źródło:
Type.cs
Źródło:
Type.cs
Źródło:
Type.cs

Po przesłonięciu w klasie pochodnej wyszukuje konstruktory zdefiniowane dla bieżącego Typeelementu , używając określonego BindingFlagselementu .

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

Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.

-lub-

Default aby zwrócić pustą tablicę.

Zwraca

Tablica ConstructorInfo obiektów reprezentujących wszystkie konstruktory zdefiniowane dla bieżącego Type elementu zgodnego z określonymi ograniczeniami powiązania, w tym inicjatora typu, jeśli jest zdefiniowana. Zwraca pustą tablicę typu ConstructorInfo , jeśli nie zdefiniowano konstruktorów dla bieżącego Typeparametru , jeśli żaden ze zdefiniowanych konstruktorów nie pasuje do ograniczeń powiązania lub jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej.

Implementuje

Atrybuty

Uwagi

bindingAttr można użyć do określenia, czy zwracać tylko konstruktory publiczne, czy zarówno konstruktory publiczne, jak i niepubliowe.

Następujące BindingFlags flagi filtru mogą służyć do definiowania konstruktorów do uwzględnienia w wyszukiwaniu:

  • Określ BindingFlags.Static element wraz z elementem BindingFlags.NonPublic , aby pobrać inicjator klasy (konstruktor statyczny). Możesz również pobrać inicjator klasy przy użyciu TypeInitializer właściwości .

  • Określ BindingFlags.Instance jedną lub obie metody BindingFlags.Public i BindingFlags.NonPublic , aby pobrać konstruktory wystąpień.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.

W przypadku platformy .NET 6 i starszych wersji GetConstructors metoda nie zwraca konstruktorów w określonej kolejności, takiej jak kolejność deklaracji. Kod nie może zależeć od kolejności zwracania konstruktorów, ponieważ ta kolejność różni się. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.

Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca ConstructorInfo obiekty z parametrami typu zastąpionymi przez odpowiednie argumenty typu. Jeśli na przykład klasa C<T> ma konstruktor C(T t1) (Sub New(ByVal t1 As T)w Visual Basic), wywołanie metody GetConstructorsC<int> zwraca wartość reprezentującą C(int t1)ConstructorInfo w języku C# (Sub New(ByVal t1 As Integer) w Visual Basic).

Jeśli bieżący Type reprezentuje ogólny parametr typu, GetConstructors metoda zwraca pustą tablicę.

Zobacz też

Dotyczy