Type.GetConstructors Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 |
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 IsStatic
metodę 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. |
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.
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.
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.PublicOr
BindingFlags.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.StaticOr
BindingFlags.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ż
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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 BindingFlags
elementu .
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 elementemBindingFlags.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 metodyBindingFlags.Public
iBindingFlags.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ż
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])