Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Type.GetProperty (String, Type, Type[], ParameterModifier[])

 

Data di pubblicazione: ottobre 2016

Cerca la proprietà pubblica specificata i cui parametri corrispondono ai tipi di argomenti e ai modificatori specificati.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public PropertyInfo GetProperty(
	string name,
	Type returnType,
	Type[] types,
	ParameterModifier[] modifiers
)

Parametri

name
Type: System.String

Stringa che contiene il nome della proprietà pubblica da ottenere.

returnType
Type: System.Type

Tipo restituito della proprietà.

types
Type: System.Type[]

Matrice di oggetti Type che rappresentano numero, ordine e tipo dei parametri relativi alla proprietà indicizzata da ottenere.

-oppure-

Matrice vuota di tipo Type (ovvero, Type[] types = new Type[0]) per ottenere una proprietà non indicizzata.

modifiers
Type: System.Reflection.ParameterModifier[]

Matrice di oggetti ParameterModifier che rappresentano gli attributi associati all'elemento corrispondente nella matrice types. Questo parametro non viene elaborato dal binder predefinito.

Valore restituito

Type: System.Reflection.PropertyInfo

Oggetto che rappresenta la proprietà pubblica corrispondente ai requisiti specificati, se è stato trovato; in caso contrario, null.

Exception Condition
AmbiguousMatchException

È stata trovata più di una proprietà con il nome specificato e corrispondente ai tipi di argomento e modificatori specificati.

ArgumentNullException

name è null.

-oppure-

types è null.

ArgumentException

types è multidimensionale.

-oppure-

modifiers è multidimensionale.

-oppure-

types e modifiers non hanno la stessa lunghezza.

NullReferenceException

Un elemento di types è null.

Una proprietà è considerata pubblica per la reflection se dispone di almeno una funzione di accesso pubblico. In caso contrario la proprietà viene considerata privata ed è necessario utilizzare BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (in Visual Basic, combinare i valori utilizzando Or) per ottenerlo.

Anche se il binder predefinito elabora ParameterModifier (il modifiers parametro), è possibile utilizzare la classe astratta System.Reflection.Binder classe per la scrittura di un gestore di associazione personalizzato che elaborano modifiers. ParameterModifierviene utilizzato solo quando una chiamata tramite l'interoperabilità COM, e vengono gestiti solo i parametri che vengono passati per riferimento.

La ricerca di name tra maiuscole e minuscole. La ricerca include proprietà di istanza pubblico statico e pubblico.

Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce il PropertyInfo con i parametri di tipo sostituiti dagli argomenti di tipo appropriato.

Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo o metodo generico, questo metodo cerca le proprietà del vincolo di classe.

Visual Basic 2005, Visual C# 2005, e Visual C++ 2005 hanno la sintassi semplificata per l'accesso alle proprietà indicizzate e consentire una proprietà indicizzata da un valore predefinito per il relativo tipo. Ad esempio, se la variabile myList fa riferimento a un ArrayList, la sintassi myList[3] (myList(3) in Visual Basic) recupera l'elemento con indice 3. È possibile eseguire l'overload di proprietà.

In c#, questa funzionalità viene chiamata un indicizzatore e non è possibile farvi riferimento in base al nome. Per impostazione predefinita, un indicizzatore c# presente nei metadati come una proprietà indicizzata denominata "Item". Tuttavia, uno sviluppatore di libreria di classi è possibile utilizzare il IndexerNameAttribute attributo per modificare il nome dell'indicizzatore nei metadati. Ad esempio, il String classe dispone di un indicizzatore denominato Chars. Proprietà indicizzate create utilizzando linguaggi diversi da c# possono avere nomi diversi da elementi, nonché. 

Per determinare se un tipo ha una proprietà predefinita, utilizzare il GetCustomAttributes(Type, Boolean) metodo da testare per la DefaultMemberAttribute attributo. Se il tipo ha DefaultMemberAttribute, MemberName proprietà restituisce il nome della proprietà predefinita.

Nell'esempio seguente viene ottenuto un Type oggetto corrispondente a MyPropertyClass, e la proprietà indicizzata di questa classe viene recuperata utilizzando gli argomenti passati al GetProperty metodo.

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

.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: