Méthodes System.Type.GetProperty

Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.

Méthode GetProperty(String)

La recherche name respecte la casse. La recherche inclut les propriétés d’instance publique statique et publique.

Une propriété est considérée comme publique pour la réflexion si elle a au moins un accesseur public. Sinon, la propriété est considérée comme privée et vous devez utiliser BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (en Visual Basic, combiner les valeurs à l’aide Orde ) pour l’obtenir.

Si le type actuel Type représente un type générique construit, cette méthode retourne les PropertyInfo paramètres de type remplacés par les arguments de type appropriés.

Si le paramètre actuel 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, cette méthode recherche les propriétés de la contrainte de classe.

Les situations dans lesquelles AmbiguousMatchException se produit sont les suivantes :

  • Un type contient deux propriétés indexées qui ont le même nom, mais des nombres différents de paramètres. Pour résoudre l’ambiguïté, utilisez une surcharge de la GetProperty méthode qui spécifie les types de paramètres.
  • Un type dérivé déclare une propriété qui masque une propriété héritée portant le même nom, à l’aide du new modificateur (Shadows en Visual Basic). Pour résoudre l’ambiguïté, utilisez la GetProperty(String, BindingFlags) surcharge de méthode et ajoutez l’indicateur BindingFlags.DeclaredOnly pour restreindre la recherche aux membres qui ne sont pas hérités.

Méthode GetProperty(String, BindingFlags)

Une propriété est considérée comme publique pour la réflexion si elle a au moins un accesseur public. Sinon, la propriété est considérée comme privée et vous devez utiliser BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (en Visual Basic, combiner les valeurs à l’aide Orde ) pour l’obtenir.

Les indicateurs de filtre suivants BindingFlags peuvent être utilisés pour définir les propriétés à inclure dans la recherche :

  • Vous devez spécifier soit BindingFlags.Instance soit BindingFlags.Static pour obtenir un retour.
  • Spécifiez BindingFlags.Public d’inclure des propriétés publiques dans la recherche.
  • Spécifiez BindingFlags.NonPublic d’inclure des propriétés non publiques (c’est-à-dire des propriétés privées, internes et protégées) dans la recherche.
  • Spécifiez BindingFlags.FlattenHierarchy l’inclusion public et protected les membres statiques de la hiérarchie ; private les membres statiques dans les classes héritées ne sont pas inclus.

Les indicateurs de modification suivants BindingFlags peuvent être utilisés pour modifier le fonctionnement de la recherche :

  • BindingFlags.IgnoreCase pour ignorer le cas de name.
  • BindingFlags.DeclaredOnly pour rechercher uniquement les propriétés déclarées sur le Type, et non les propriétés qui ont été simplement héritées.

Consultez la rubrique System.Reflection.BindingFlags (éventuellement en anglais) pour plus d’informations.

Si le type actuel Type représente un type générique construit, cette méthode retourne les PropertyInfo paramètres de type remplacés par les arguments de type appropriés.

Si le paramètre actuel 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, cette méthode recherche les propriétés de la contrainte de classe.

Les situations dans lesquelles AmbiguousMatchException se produit sont les suivantes :

  • Un type contient deux propriétés indexées qui ont le même nom, mais des nombres différents de paramètres. Pour résoudre l’ambiguïté, utilisez une surcharge de la GetProperty méthode qui spécifie les types de paramètres.
  • Un type dérivé déclare une propriété qui masque une propriété héritée portant le même nom, à l’aide du new modificateur (Shadows en Visual Basic). Pour résoudre l’ambiguïté, incluez BindingFlags.DeclaredOnly pour restreindre la recherche aux membres qui ne sont pas hérités.

GetProperty(System.String,System.RéflexionsIon. BindingFlags,System. Réflexions ion. Binder,System.Type,System.Type[],System. Réflexions ion. ParameterModifier[])

Une propriété est considérée comme publique pour la réflexion si elle a au moins un accesseur public. Sinon, la propriété est considérée comme privée et vous devez utiliser BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (en Visual Basic, combiner les valeurs à l’aide Orde ) pour l’obtenir.

Bien que le classeur par défaut ne traite ParameterModifier pas (le modifiers paramètre), vous pouvez utiliser la classe abstraite System.Reflection.Binder pour écrire un classeur personnalisé qui traite modifiers. ParameterModifier est utilisé uniquement lors de l’appel via l’interopérabilité COM, et seuls les paramètres passés par référence sont gérés.

Le tableau suivant montre les membres d’une classe de base 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.
Event 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é. Réflexions ion traite les propriétés comme masquage par nom et signature.2
Méthode Non Oui. Une méthode (virtuelle et non virtuelle) peut être masquée par nom 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é. Réflexions ion traite les propriétés comme masquage par nom et signature.2

Remarques :

  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.

Les indicateurs de filtre suivants BindingFlags peuvent être utilisés pour définir les propriétés à inclure dans la recherche :

  • Vous devez spécifier soit BindingFlags.Instance soit BindingFlags.Static pour obtenir un retour.
  • Spécifiez BindingFlags.Public d’inclure des propriétés publiques dans la recherche.
  • Spécifiez BindingFlags.NonPublic d’inclure des propriétés non publiques (c’est-à-dire des propriétés privées, internes et protégées) dans la recherche.
  • Spécifiez BindingFlags.FlattenHierarchy l’inclusion public et protected les membres statiques de la hiérarchie ; private les membres statiques dans les classes héritées ne sont pas inclus.

Les indicateurs de modification suivants BindingFlags peuvent être utilisés pour modifier le fonctionnement de la recherche :

  • BindingFlags.IgnoreCase pour ignorer le cas de name.
  • BindingFlags.DeclaredOnly pour rechercher uniquement les propriétés déclarées sur le Type, et non les propriétés qui ont été simplement héritées.

Consultez la rubrique System.Reflection.BindingFlags (éventuellement en anglais) pour plus d’informations.

Si le type actuel Type représente un type générique construit, cette méthode retourne les PropertyInfo paramètres de type remplacés par les arguments de type appropriés.

Si le paramètre actuel 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, cette méthode recherche les propriétés de la contrainte de classe.

Indexeurs et propriétés par défaut

Visual Basic, C# et C++ ont une syntaxe simplifiée pour accéder aux propriétés indexées et permettre à une propriété indexée d’être une valeur par défaut pour son type. Par exemple, si la variable myList fait référence à un ArrayList, la syntaxe myList[3] (myList(3) en Visual Basic) récupère l’élément avec l’index 3. Vous pouvez surcharger la propriété.

En C#, cette fonctionnalité est appelée indexeur et ne peut pas être référencée par son nom. Par défaut, un indexeur C# apparaît dans les métadonnées sous la forme d’une propriété indexée nommée Item. Toutefois, un développeur de bibliothèque de classes peut utiliser l’attribut IndexerNameAttribute pour modifier le nom de l’indexeur dans les métadonnées. Par exemple, la String classe a un indexeur nommé Chars[]. Les propriétés indexées créées à l’aide de langages autres que C# peuvent également avoir des noms autres que Item, ainsi.

Pour déterminer si un type a une propriété par défaut, utilisez la GetCustomAttributes(Type, Boolean) méthode pour tester l’attribut DefaultMemberAttribute . Si le type a DefaultMemberAttribute, la MemberName propriété retourne le nom de la propriété par défaut.