Recherche la propriété spécifiée, à l'aide des contraintes de liaison spécifiées.
Assembly : mscorlib (dans mscorlib.dll)
Public Function GetProperty ( _ name As String, _ bindingAttr As BindingFlags _ ) As PropertyInfo
public PropertyInfo GetProperty( string name, BindingFlags bindingAttr )
public: virtual PropertyInfo^ GetProperty( String^ name, BindingFlags bindingAttr ) sealed
abstract GetProperty : name:string * bindingAttr:BindingFlags -> PropertyInfo override GetProperty : name:string * bindingAttr:BindingFlags -> PropertyInfo
Paramètres
- name
- Type : System.String
Chaîne contenant le nom de la propriété à obtenir.
- bindingAttr
- Type : System.Reflection.BindingFlags
Masque de bits constitué d'un ou de plusieurs BindingFlags spécifiant le mode d'exécution de la recherche.
ou
Zéro, pour retourner null.
Valeur de retour
Type : System.Reflection.PropertyInfoObjet représentant la propriété qui correspond aux critères spécifiés, si elle est trouvée ; sinon, null.
Implémentations
_Type.GetProperty(String, BindingFlags)IReflect.GetProperty(String, BindingFlags)
| Exception | Condition |
|---|---|
| AmbiguousMatchException |
Il existe plusieurs propriétés portant le nom spécifié et correspondant aux contraintes de liaison spécifiées. Voir Notes. |
| ArgumentNullException |
name est null. |
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.
Les indicateurs de filtre BindingFlags suivants 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 pour inclure les propriétés publiques dans la recherche.
-
Spécifiez BindingFlags.NonPublic pour 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 pour inclure les membres statiques public et protected en haut de la hiérarchie ; les membres statiques private dans les classes héritées ne sont pas inclus.
Les indicateurs de modificateur BindingFlags suivants peuvent être utilisés pour modifier le fonctionnement de la recherche :
-
BindingFlags.IgnoreCase pour ignorer la casse de name.
-
BindingFlags.DeclaredOnly pour rechercher uniquement les propriétés déclarées sur Type et non les propriétés qui ont été simplement héritées.
Consultez System.Reflection.BindingFlags pour plus d'informations.
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é, 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 le type d'une classe définie par l'utilisateur, récupère une propriété de cette classe et en affiche le nom conformément aux contraintes de liaison spécifiées.
Imports System Imports System.Reflection Module Module1 Public Class MyClass1 Private myProperty1 As Integer ' Declare MyProperty. Public Property MyProperty() As Integer Get Return myProperty1 End Get Set(ByVal Value As Integer) myProperty1 = Value End Set End Property Public Shared Sub Main() Try ' Get a Type object corresponding to MyClass. Dim myType As Type = GetType(MyClass1) ' Get a PropertyInfo object by passing property name and specifying BindingFlags. Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty", BindingFlags.Public Or BindingFlags.Instance) ' Display the Name property. Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name) Catch e As NullReferenceException Console.WriteLine("MyProperty does not exist in MyClass.", e.Message.ToString()) End Try End Sub 'Main End Class 'MyClass1 End Module 'Module1
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 Type object of MyClass. Type myType=typeof(MyClass); // Get the PropertyInfo by passing the property name and specifying the BindingFlags. PropertyInfo myPropInfo = myType.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.Instance); // Display Name propety to console. Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name); } catch(NullReferenceException e) { Console.WriteLine("MyProperty does not exist in MyClass." +e.Message); } } }
using namespace System; using namespace System::Reflection; ref class MyClass { private: int myProperty; public: property int MyProperty { // Declare MyProperty. int get() { return myProperty; } void set( int value ) { myProperty = value; } } }; int main() { try { // Get Type object of MyClass. Type^ myType = MyClass::typeid; // Get the PropertyInfo by passing the property name and specifying the BindingFlags. PropertyInfo^ myPropInfo = myType->GetProperty( "MyProperty", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) ); // Display Name propety to console. Console::WriteLine( "{0} is a property of MyClass.", myPropInfo->Name ); } catch ( NullReferenceException^ e ) { Console::WriteLine( "MyProperty does not exist in MyClass. {0}", e->Message ); } }
.NET Framework
Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Pris en charge dans : 4, 3.5 SP1Pris en charge dans :
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.