Type.GetConstructors Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene i costruttori dell'oggetto corrente Type.
Overload
| Nome | Descrizione |
|---|---|
| GetConstructors() |
Restituisce tutti i costruttori pubblici definiti per l'oggetto corrente Type. |
| GetConstructors(BindingFlags) |
Quando sottoposto a override in una classe derivata, cerca i costruttori definiti per l'oggetto corrente Typeusando l'oggetto specificato |
Esempio
Questo esempio mostra l'output dell'overload GetConstructors() da una classe con due costruttori di istanza e un costruttore statico.
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
L'output di questo codice è:
2
False
False
Poiché l'overload GetConstructors usa solo Public e Instance, il costruttore statico non viene conteggiato né dall'espressione for né valutato da IsStatic.
Per trovare costruttori statici, usare l'overload GetConstructors e passarlo alla combinazione (OR logico) di BindingFlags.Public, BindingFlags.StaticBindingFlags.NonPublic, , BindingFlags.Instancecome illustrato nell'esempio di codice seguente:
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
L'output è ora:
3
False
True
False
GetConstructors()
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Restituisce tutti i costruttori pubblici definiti per l'oggetto corrente Type.
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()
Restituisce
Matrice di oggetti che rappresentano tutti i costruttori di ConstructorInfo istanze pubbliche definiti per l'oggetto corrente Type, ma non incluso l'inizializzatore di tipo (costruttore statico). Se per l'oggetto corrente Typenon sono definiti costruttori di istanze pubbliche o se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, viene restituita una matrice vuota di tipo ConstructorInfo .
Implementazioni
- Attributi
Commenti
In .NET 6 e versioni precedenti il GetConstructors metodo non restituisce costruttori in un ordine specifico, ad esempio l'ordine di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i costruttori, perché tale ordine varia. Tuttavia, a partire da .NET 7, l'ordinamento è deterministico in base all'ordinamento dei metadati nell'assembly.
Nella tabella seguente vengono illustrati i membri della classe base restituiti dai Get metodi quando si analizza un tipo.
| Tipo di membro | Statico | Non statico |
|---|---|---|
| Costruttore | No | No |
| Campo | No | Sì. Un campo è sempre nascosto per nome e firma. |
| Event | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
| metodo | No | Sì. Un metodo (virtuale e non virtuale) può essere nascosto per nome o nascosto per nome e firma. |
| Tipo annidato | No | No |
| Proprietà | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.
In riflessione, le proprietà e gli eventi sono hide-by-name-and-signature. Se si dispone di una proprietà con una funzione di accesso get e set nella classe base, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.
Gli attributi personalizzati non fanno parte del sistema di tipi comune.
Questo overload del metodo chiama l'overload del GetConstructors(BindingFlags) metodo , con | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). Non troverà gli inizializzatori di classe (costruttore statico). Per trovare gli inizializzatori di classe, usare un overload che accetta BindingFlagse specificare | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). È anche possibile ottenere l'inizializzatore di classe usando la TypeInitializer proprietà .
Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli ConstructorInfo oggetti con i parametri di tipo sostituiti dagli argomenti di tipo appropriati. Ad esempio, se la classe C<T> ha un costruttore C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), la chiamata GetConstructors su C<int> restituisce un ConstructorInfo oggetto che rappresenta C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).
Se l'oggetto corrente Type rappresenta un parametro di tipo generico, il GetConstructors metodo restituisce una matrice vuota.
Vedi anche
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Si applica a
GetConstructors(BindingFlags)
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Quando sottoposto a override in una classe derivata, cerca i costruttori definiti per l'oggetto corrente Typeusando l'oggetto specificato BindingFlags.
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()
Parametri
- bindingAttr
- BindingFlags
Combinazione bit per bit dei valori di enumerazione che specificano come viene eseguita la ricerca.
oppure
Default per restituire una matrice vuota.
Restituisce
Matrice di oggetti che rappresentano tutti i costruttori definiti per l'oggetto corrente Type che corrispondono ai vincoli di ConstructorInfo associazione specificati, incluso l'inizializzatore di tipo, se definito. Restituisce una matrice vuota di tipo ConstructorInfo se non sono definiti costruttori per l'oggetto corrente Type, se nessuno dei costruttori definiti corrisponde ai vincoli di associazione oppure se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico.
Implementazioni
- Attributi
Commenti
bindingAttr può essere usato per specificare se restituire solo costruttori pubblici o costruttori pubblici e non pubblici.
I flag di filtro seguenti BindingFlags possono essere usati per definire i costruttori da includere nella ricerca:
Specificare
BindingFlags.StaticinsiemeBindingFlags.NonPublica per recuperare l'inizializzatore di classe (costruttore statico). È anche possibile ottenere l'inizializzatore di classe usando la TypeInitializer proprietà .Specificare
BindingFlags.Instanceinsieme a uno o entrambi eBindingFlags.NonPublicper recuperare i costruttori diBindingFlags.Publicistanza.
Per altre informazioni, vedere System.Reflection.BindingFlags.
In .NET 6 e versioni precedenti il GetConstructors metodo non restituisce costruttori in un ordine specifico, ad esempio l'ordine di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i costruttori, perché tale ordine varia. Tuttavia, a partire da .NET 7, l'ordinamento è deterministico in base all'ordinamento dei metadati nell'assembly.
Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli ConstructorInfo oggetti con i parametri di tipo sostituiti dagli argomenti di tipo appropriati. Ad esempio, se la classe C<T> ha un costruttore C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), la chiamata GetConstructors su C<int> restituisce un ConstructorInfo oggetto che rappresenta C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).
Se l'oggetto corrente Type rappresenta un parametro di tipo generico, il GetConstructors metodo restituisce una matrice vuota.
Vedi anche
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])