Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
Type.GetProperty, méthode (String)
Recherche la propriété publique avec le nom spécifié.
Assembly : mscorlib (dans mscorlib.dll)
Paramètres
- name
- Type : System.String
Chaîne contenant le nom de la propriété publique à obtenir.
Valeur de retour
Type : System.Reflection.PropertyInfoObjet représentant la propriété publique avec le nom spécifié, si elle est trouvée ; sinon, null.
Implémentations
_Type.GetProperty(String)| Exception | Condition |
|---|---|
| AmbiguousMatchException |
La recherche a trouvé plus d'une propriété présentant le nom spécifié. Voir Notes. |
| ArgumentNullException |
name est null. |
La recherche de name respecte la casse. La recherche inclut les propriétés d'instance statiques publiques et publiques.
Une propriété est considérée comme publique par rapport à la réflexion si au moins l'un de ses accesseurs est public. Sinon, la propriété est considérée comme privée, et vous devez utiliser BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (en Visual Basic, combinez les valeurs à l'aide d' Or) pour l'obtenir.
Si le Type actuel représente un type générique construit, cette méthode retourne PropertyInfo avec les paramètres de type remplacés par les arguments de type appropriés.
Si le Type actuel représente un paramètre de type dans la définition d'un type 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 incluent les éléments suivants :
-
Un type contient deux propriétés indexées qui ont le même nom mais pas le même nombre de paramètres. Pour résoudre l'ambiguïté, utilisez une surcharge de la méthode GetProperty qui spécifie des types de paramètre.
-
Un type dérivé déclare une propriété qui masque une propriété héritée avec le même nom, en utilisant le modificateur new (Shadows en Visual Basic). Pour résoudre l'ambiguïté, utilisez la surcharge de méthode GetProperty(String, BindingFlags) et incluez BindingFlags.DeclaredOnly pour limiter la recherche aux membres qui ne sont pas hérités.
Indexeurs et propriétés par défaut
Visual Basic 2005, Visual C# 2005 et Visual C++ 2005 ont une syntaxe simplifiée pour accéder aux propriétés indexées et permettent à une propriété indexée d'être la 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 égal à 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 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èques de classes peut utiliser l'attribut IndexerNameAttribute pour modifier le nom de l'indexeur dans les métadonnées. Par exemple, la classe String 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 différents de Item.
Pour déterminer si un type a une propriété par défaut, utilisez la méthode GetCustomAttributes(Type, Boolean) pour tester l'attribut DefaultMemberAttribute. Si le type a DefaultMemberAttribute, la propriété MemberName retourne le nom de la propriété par défaut.
L'exemple suivant récupère l'objet Type d'une classe définie par l'utilisateur, puis récupère une propriété de cette classe et en affiche le nom.
using System; using System.Reflection; class MyClass { private int myProperty; // Declare MyProperty. public int MyProperty { get { return myProperty; } set { myProperty=value; } } } public class MyTypeClass { public static void Main(string[] args) { try { // Get the Type object corresponding to MyClass. Type myType=typeof(MyClass); // Get the PropertyInfo object by passing the property name. PropertyInfo myPropInfo = myType.GetProperty("MyProperty"); // Display the property name. Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name); } catch(NullReferenceException e) { Console.WriteLine("The property does not exist in MyClass." + e.Message); } } }
En interne, il est fait référence à cette propriété par le nom "Item" dans les métadonnées. Toute tentative d'obtention de PropertyInfo à l'aide de la réflexion doit spécifier ce nom interne pour que la propriété PropertyInfo soit retournée correctement.
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.