Partager via


Type.GetConstructors Méthode

Définition

Obtient les constructeurs du .Type

Surcharges

Nom Description
GetConstructors()

Retourne tous les constructeurs publics définis pour le Typeactuel.

GetConstructors(BindingFlags)

En cas de substitution dans une classe dérivée, recherche les constructeurs définis pour le Typeactuel, à l’aide de la BindingFlagsspécifiée.

Exemples

Cet exemple montre la sortie de la GetConstructors() surcharge à partir d’une classe qui a deux constructeurs d’instance et un constructeur statique.

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 Instanceque 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 transmettez-le la combinaison (OR logique) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, , BindingFlags.Instancecomme illustré dans l’exemple de code suivant :

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
Source:
Type.cs
Source:
Type.cs

Retourne tous les constructeurs publics définis pour le Typeactuel.

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

Retours

Tableau d’objets ConstructorInfo représentant tous les constructeurs d’instance publique définis pour le current Type, mais sans inclure l’initialiseur de type (constructeur statique). Si aucun constructeur d’instance publique n’est défini pour le courant Typeou si le courant Type représente un paramètre de type dans la définition d’un type générique ou d’une méthode générique, un tableau de type ConstructorInfo vide est retourné.

Implémente

Attributs

Remarques

Dans .NET 6 et 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, à partir de .NET 7, l’ordre est déterministe en fonction de l’ordre des métadonnées dans l’assembly.

Le tableau suivant montre quels membres d'une classe de base sont retournés par les Get méthodes lors de la réflexion sur un type.

Type de membre Statique Non statique
Constructor Non Non
Champ Non Yes. Un champ est toujours masqué par nom et signature.
Événement Sans objet La règle du système de type courant est que l'héritage est identique à celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous.
Méthode Non Yes. Une méthode (virtuelle et non virtuelle) peut être masquée par nom ou par nom et signature.
Type imbriqué Non Non
Propriété Sans objet La règle du système de type courant est que l'héritage est identique à celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous.
  1. Hide-by-name-and-signature prend en compte toutes les parties de la signature, notamment 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 au 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 GetConstructors(BindingFlags) surcharge de 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 accepte BindingFlagset 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 courant Type représente un type générique construit, cette méthode retourne les objets avec les ConstructorInfo 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 la C<int> fonction retourne un ConstructorInfo représentant C(int t1) en C# (Sub New(ByVal t1 As Integer) en Visual Basic).

Si le paramètre 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
Source:
Type.cs
Source:
Type.cs

En cas de substitution dans une classe dérivée, recherche les constructeurs définis pour le Typeactuel, à l’aide de la BindingFlagsspécifiée.

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

Paramètres

bindingAttr
BindingFlags

Combinaison de bits des valeurs d’énumération qui spécifient la façon dont la recherche est effectuée.

- ou -

Default pour retourner un tableau vide.

Retours

Tableau d’objets représentant tous les constructeurs définis pour le courant Type qui correspondent aux contraintes de ConstructorInfo liaison spécifiées, y compris l’initialiseur de type s’il est défini. Retourne un tableau de type ConstructorInfo vide si aucun constructeur n’est défini pour le constructeur actuel Type, si aucun des constructeurs définis ne correspond aux contraintes de liaison, ou si le courant Type représente un paramètre de type dans la définition d’un type générique ou d’une 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 un ou les deux constructeurs d’instance BindingFlags.Public et BindingFlags.NonPublic pour récupérer des constructeurs d’instance.

Pour plus d’informations, consultez System.Reflection.BindingFlags.

Dans .NET 6 et 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, à partir de .NET 7, l’ordre est déterministe en fonction de l’ordre des métadonnées dans l’assembly.

Si le courant Type représente un type générique construit, cette méthode retourne les objets avec les ConstructorInfo 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 la C<int> fonction retourne un ConstructorInfo représentant C(int t1) en C# (Sub New(ByVal t1 As Integer) en Visual Basic).

Si le paramètre actuel Type représente un paramètre de type générique, la GetConstructors méthode retourne un tableau vide.

Voir aussi

S’applique à