Type.GetProperty, méthode (String, BindingFlags) (System)

Changer de vue:
ScriptFree
Bibliothèque de classes .NET Framework
Type.GetProperty, méthode (String, BindingFlags)
Cet article a fait l'objet d'une traduction manuelle. Pour afficher simultanément cette page et le contenu source en anglais, choisissez le paramètre d'affichage Basse densité.

Recherche la propriété spécifiée, à l'aide des contraintes de liaison spécifiées.

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)
Syntaxe

Visual Basic
Public Function GetProperty ( _
	name As String, _
	bindingAttr As BindingFlags _
) As PropertyInfo
C#
public PropertyInfo GetProperty(
	string name,
	BindingFlags bindingAttr
)
VisualC++
public:
virtual PropertyInfo^ GetProperty(
	String^ name, 
	BindingFlags bindingAttr
) sealed
F#
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.PropertyInfo
Objet 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)
Exceptions

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.

Notes

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.

Exemples

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.

Visual Basic


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


C#


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);
        }
    }
}


VisualC++

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 );
   }
}


Informations de version

.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 SP1

Pris en charge dans :
Plateformes

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.
Voir aussi

Référence