Partage via


Type.GetConstructors Méthode

Définition

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 BindingFlags spécifié.

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

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

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

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 avec BindingFlags.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 de BindingFlags.Public et BindingFlags.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

S’applique à