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 Or
de ) 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 Or
de ) 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
soitBindingFlags.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’inclusionpublic
etprotected
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 dename
.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 Or
de ) 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 :
- 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.
- 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.
- 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
soitBindingFlags.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’inclusionpublic
etprotected
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 dename
.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.