Exporter (0) Imprimer
Développer tout

Type.GetProperty, méthode (String, Type, Type[], ParameterModifier[])

Recherche la propriété publique spécifiée dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés.

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

public PropertyInfo GetProperty (
	string name,
	Type returnType,
	Type[] types,
	ParameterModifier[] modifiers
)
public final PropertyInfo GetProperty (
	String name, 
	Type returnType, 
	Type[] types, 
	ParameterModifier[] modifiers
)
public final function GetProperty (
	name : String, 
	returnType : Type, 
	types : Type[], 
	modifiers : ParameterModifier[]
) : PropertyInfo
Non applicable.

Paramètres

name

String contenant le nom de la propriété publique à obtenir.

returnType

Type de retour de la propriété.

types

Tableau d'objets Type représentant le nombre, l'ordre et le type des paramètres de la propriété indexée à obtenir.

– ou –

Tableau vide du type Type (c'est-à-dire Type[] types = new Type[0]) pour obtenir une propriété qui n'est pas indexée.

modifiers

Tableau d'objets ParameterModifier représentant les attributs associés à l'élément correspondant dans le tableau types. Le binder par défaut ne traite pas ce paramètre.

Valeur de retour

Objet PropertyInfo représentant la propriété publique qui répond aux spécifications, si elle est trouvée ; sinon, référence Null (Nothing en Visual Basic).

Type d'exceptionCondition

AmbiguousMatchException

La recherche a trouvé plus d'une propriété présentant le nom spécifié et correspondant aux types d'arguments et modificateurs spécifiés.

ArgumentNullException

name a la valeur référence Null (Nothing en Visual Basic).

– ou –

types a la valeur référence Null (Nothing en Visual Basic).

– ou –

Un des éléments dans types est référence Null (Nothing en Visual Basic).

ArgumentException

types est multidimensionnel.

– ou –

modifiers est multidimensionnel.

– ou –

types et modifiers n'ont pas la même longueur.

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 de Or) pour l'obtenir.

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

Les tableaux types et modifiers ont la même longueur. Un paramètre spécifié dans le tableau types peut avoir les attributs suivants, spécifiés dans le tableau modifiers : pdIn, pdOut, pdLcid, pdRetval, pdOptional et pdHasDefault, qui représentent [In], [Out], [lcid], [retval], [optional], et une valeur spécifiant si le paramètre a une valeur par défaut. Les attributs associés à un paramètre sont stockés dans les métadonnées et améliorent l'interopérabilité.

La recherche de name respecte la casse. La recherche inclut les propriétés d'instance statiques publiques et publiques.

Si la propriété demandée est non publique et si l'appelant ne possède pas de ReflectionPermission pour réfléchir les objets non publics en dehors de l'assembly actuel, cette méthode retourne référence Null (Nothing en Visual Basic).

Si le Type en cours 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.

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 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 obtient un objet Type correspondant à MyPropertyClass et la propriété indexée de cette classe est récupérée à l'aide des arguments passés à la méthode GetProperty.

using System;
using System.Reflection;
public class MyPropertyClass
{
    private int [,] myPropertyArray = new int[10,10]; 
    // Declare an indexer.
    public int this [int i,int j]
    {
        get 
        {
            return myPropertyArray[i,j];
        }
        set 
        {
            myPropertyArray[i,j] = value;
        }
    }
}
public class MyTypeClass
{
    public static void Main()
    {
        try
        {
            Type myType=typeof(MyPropertyClass);
            Type[] myTypeArray = new Type[2];
            // Create an instance of the Type array representing the number, order 
            // and type of the parameters for the property.
            myTypeArray.SetValue(typeof(int),0);
            myTypeArray.SetValue(typeof(int),1);
            // Search for the indexed property whose parameters match the
            // specified argument types and modifiers.
            PropertyInfo myPropertyInfo = myType.GetProperty("Item",
                typeof(int),myTypeArray,null);
            Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name + 
                " has a property type of " + myPropertyInfo.PropertyType);
         }
        catch(Exception ex)
        {
            Console.WriteLine("An exception occurred " + ex.Message);
        }
    }
}

import System.*;
import System.Reflection.*;

public class MyPropertyClass
{
    private int myPropertyArray[,] = new int[10, 10];

    // Declare an indexer.
    /** @property 
     */
    public int get_Item(int i, int j)
    {
        return myPropertyArray[i, j];
    } //Item 

    /** @property 
     */
    public void set_Item(int i, int j, int value)
    {
        myPropertyArray[i, j] = value;
    } //Item
} //MyPropertyClass

public class MyTypeClass
{
    public static void main(String[] args)
    {
        try {
            Type myType = MyPropertyClass.class.ToType();
            Type myTypeArray[] = new Type[2];
            // Create an instance of the Type array representing the number, 
            // order and type of the parameters for the property.
            myTypeArray.SetValue(int.class.ToType(), 0);
            myTypeArray.SetValue(int.class.ToType(), 1);
            // Search for the indexed property whose parameters match the
            // specified argument types and modifiers.
            PropertyInfo myPropertyInfo = myType.GetProperty("Item",
                int.class.ToType(), myTypeArray, null);
            Console.WriteLine(myType.get_FullName() + "." + myPropertyInfo.
                get_Name() + " has a property type of " + myPropertyInfo.
                GetType());
        }
        catch (System.Exception ex) {
            Console.WriteLine("An exception occurred " + ex.get_Message());
        }
    } //main
} //MyTypeClass

Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 est pris en charge sur Windows Vista, Microsoft Windows XP SP2 et Windows Server 2003 SP1.

.NET Framework

Prise en charge dans : 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 1.0

XNA Framework

Prise en charge dans : 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft