Type.GetConstructors Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient les constructeurs du Type actuel.
Surcharges
GetConstructors() |
Retourne tous les constructeurs publics définis pour le Type actuel. |
GetConstructors(BindingFlags) |
En cas de substitution dans une classe dérivée, recherche les constructeurs définis pour le Type actuel, à l'aide du |
Exemples
Cet exemple montre la sortie de la GetConstructors() surcharge d’une classe qui a deux constructeurs instance et un constructeur statique.
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
La sortie de ce code est la suivante :
2
False
False
Étant donné que la GetConstructors surcharge utilise uniquement Public et Instance, le constructeur statique n’est ni compté par l’expression for
ni évalué par IsStatic
.
Pour rechercher des constructeurs statiques, utilisez la GetConstructors surcharge et passez-lui la combinaison (OU logique) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, , comme illustré dans l’exemple de code suivant :
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
À présent, la sortie est la suivante :
3
False
True
False
GetConstructors()
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Retourne tous les constructeurs publics définis pour le Type actuel.
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()
Retours
Tableau d'objets ConstructorInfo représentant tous les constructeurs d'instance publics définis pour le Type actuel, sans inclure l'initialiseur de type (constructeur statique). Si aucun constructeur d’instance public n’est défini pour le Type actuel ou si le Type actuel représente un paramètre de type d’une définition de type ou de méthode générique, un tableau vide de type ConstructorInfo est retourné.
Implémente
- Attributs
Remarques
Dans .NET 6 et les versions antérieures, la GetConstructors méthode ne retourne pas de constructeurs dans un ordre particulier, tel que l’ordre de déclaration. Votre code ne doit pas dépendre de l’ordre dans lequel les constructeurs sont retournés, car cet ordre varie. Toutefois, à compter de .NET 7, l’ordre est déterministe en fonction du classement des métadonnées dans l’assembly.
Le tableau suivant montre quels membres d’une classe de base sont retournés par les méthodes lors de la Get
réflexion sur un type.
Type de membre | statique | Non statique |
---|---|---|
Constructeur | Non | Non |
Champ | Non | Oui. Un champ est toujours masqué par nom et signature. |
Événement | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (virtuelle et non virtuelle) peut être hide-by-name ou hide-by-name-and-signature. |
Type imbriqué | Non | Non |
Propriété | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Masquer par nom et signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés, les types de retour, les types de paramètres, les sentinelles et les conventions d’appel non managées. Il s’agit d’une comparaison binaire.
Pour la réflexion, les propriétés et les événements sont masqués par nom et signature. Si vous avez une propriété avec un accesseur get et un accesseur set dans la classe de base, mais que la classe dérivée n’a qu’un accesseur get, la propriété de classe dérivée masque la propriété de classe de base et vous ne pourrez pas accéder à l’élément setter sur la classe de base.
Les attributs personnalisés ne font pas partie du système de type commun.
Cette surcharge de méthode appelle la surcharge de GetConstructors(BindingFlags) méthode, avec | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOr
BindingFlags.Instance en Visual Basic). Il ne trouvera pas d’initialiseurs de classe (constructeur statique). Pour rechercher des initialiseurs de classe, utilisez une surcharge qui prend BindingFlags, et spécifiez | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOr
BindingFlags.NonPublic en Visual Basic). Vous pouvez également obtenir l’initialiseur de classe à l’aide de la TypeInitializer propriété .
Si le actuel Type représente un type générique construit, cette méthode retourne les ConstructorInfo objets avec les paramètres de type remplacés par les arguments de type appropriés. Par exemple, si la classe C<T>
a un constructeur C(T t1)
(Sub New(ByVal t1 As T)
en Visual Basic), l’appel GetConstructors de on C<int>
renvoie un ConstructorInfo qui représente C(int t1)
en C# (Sub New(ByVal t1 As Integer)
en Visual Basic).
Si le actuel Type représente un paramètre de type générique, la GetConstructors méthode retourne un tableau vide.
Voir aussi
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
S’applique à
GetConstructors(BindingFlags)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
En cas de substitution dans une classe dérivée, recherche les constructeurs définis pour le Type actuel, à l'aide du BindingFlags
spécifié.
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()
Paramètres
- bindingAttr
- BindingFlags
Combinaison de bits de valeurs d’énumération qui spécifie la façon dont est effectuée la recherche.
- ou -
Default pour retourner un tableau vide.
Retours
Tableau d’objets ConstructorInfo représentant tous les constructeurs définis pour le actuel Type qui correspondent aux contraintes de liaison spécifiées, y compris l’initialiseur de type s’il est défini. Retourne un tableau vide de type ConstructorInfo si aucun constructeur n’est défini pour le Type actuel, si aucun des constructeurs définis ne correspond aux contraintes de liaison, ou si le Type actuel représente un paramètre de type d’une définition de type ou de méthode générique.
Implémente
- Attributs
Remarques
bindingAttr
peut être utilisé pour spécifier s’il faut retourner uniquement des constructeurs publics ou des constructeurs publics et non publics.
Les indicateurs de filtre suivants BindingFlags peuvent être utilisés pour définir les constructeurs à inclure dans la recherche :
Spécifiez
BindingFlags.Static
avecBindingFlags.NonPublic
pour récupérer l’initialiseur de classe (constructeur statique). Vous pouvez également obtenir l’initialiseur de classe à l’aide de la TypeInitializer propriété .Spécifiez
BindingFlags.Instance
avec l’un ou les deux deBindingFlags.Public
etBindingFlags.NonPublic
pour récupérer instance constructeurs.
Consultez la rubrique System.Reflection.BindingFlags (éventuellement en anglais) pour plus d'informations.
Dans .NET 6 et les versions antérieures, la GetConstructors méthode ne retourne pas de constructeurs dans un ordre particulier, tel que l’ordre de déclaration. Votre code ne doit pas dépendre de l’ordre dans lequel les constructeurs sont retournés, car cet ordre varie. Toutefois, à compter de .NET 7, l’ordre est déterministe en fonction du classement des métadonnées dans l’assembly.
Si le actuel Type représente un type générique construit, cette méthode retourne les ConstructorInfo objets avec les paramètres de type remplacés par les arguments de type appropriés. Par exemple, si la classe C<T>
a un constructeur C(T t1)
(Sub New(ByVal t1 As T)
en Visual Basic), l’appel GetConstructors de on C<int>
renvoie un ConstructorInfo qui représente C(int t1)
en C# (Sub New(ByVal t1 As Integer)
en Visual Basic).
Si le actuel Type représente un paramètre de type générique, la GetConstructors méthode retourne un tableau vide.
Voir aussi
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])