Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

Type.GetProperty-Methode (String, Type[])

Aktualisiert: November 2007

Sucht die angegebene öffentliche Eigenschaft, deren Parameter den angegebenen Argumenttypen entsprechen.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

public PropertyInfo GetProperty(
	string name,
	Type[] types
)
public final PropertyInfo GetProperty(
	String name,
	Type[] types
)
public final function GetProperty(
	name : String, 
	types : Type[]
) : PropertyInfo

Parameter

name
Typ: System.String
Der String, der den Namen der abzurufenden öffentlichen Eigenschaft enthält.
types
Typ: System.Type[]
Ein Array von Type-Objekten, die Anzahl, Reihenfolge und Typ der Parameter der abzurufenden indizierten Eigenschaft darstellen.
– oder –
Ein leeres Array vom Type-Typ, d. h. Type[] types = new Type[0], zum Abrufen einer nicht indizierten Eigenschaft.

Rückgabewert

Typ: System.Reflection.PropertyInfo
Ein PropertyInfo-Objekt, das die öffentliche Eigenschaft darstellt, deren Parameter den angegebenen Argumenttypen entsprechen, sofern gefunden, andernfalls null.

Implementiert

_Type.GetProperty(String, Type[])

AusnahmeBedingung
AmbiguousMatchException

Es wurde mehr als eine Eigenschaft mit dem angegebenen Namen gefunden, die den angegebenen Argumenttypen entspricht.

ArgumentNullException

Der name-Parameter ist null.

– oder –

Der types-Parameter ist null.

ArgumentException

types ist mehrdimensional.

NullReferenceException

Ein Element von types ist null.

Eine Eigenschaft wird von der Reflektion als öffentlich betrachtet, wenn sie mindestens einen öffentlichen Accessor besitzt. Andernfalls wird die Eigenschaft als privat betrachtet, und Sie müssen BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (kombinieren Sie die Werte in Visual Basic mit Or) zum Abrufen verwenden.

Bei der Suche nach name wird die Groß- und Kleinschreibung berücksichtigt. Die Suche schließt öffentliche statische Eigenschaften und öffentliche Instanzeigenschaften ein.

Diese Methode gibt null zurück, wenn die angeforderte Eigenschaft nicht öffentlich ist und der Aufrufer keine ReflectionPermission zum Reflektieren nicht öffentlicher Objekte außerhalb der aktuellen Assembly besitzt.

Wenn der aktuelle Type einen konstruierten generischen Typ darstellt, gibt diese Methode die PropertyInfo zurück, wobei die Typparameter durch die entsprechenden Typargumente ersetzt wurden.

Wenn der aktuelle Type einen Typparameter einer generischen Typ- oder Methodendefinition darstellt, durchsucht diese Methode die Eigenschaften der Klasseneinschränkung.

Indexer und Standardeigenschaften

Visual Basic 2005, Visual C# 2005 und Visual C++ 2005 bieten eine vereinfachte Syntax für den Zugriff auf indizierte Eigenschaften und ermöglichen es, eine indizierte Eigenschaft als Standardeigenschaft für den zugehörigen Typ festzulegen. Wenn z. B. die Variable myList auf eine ArrayList verweist, wird mit der Syntax myList[3] (myList(3) in Visual Basic) das Element an Indexposition 3 abgerufen. Sie können diese Eigenschaft überladen.

In C# wird dieses Feature als Indexer bezeichnet, und es sind keine Verweise über den Namen möglich. Standardmäßig wird ein C#-Indexer in den Metadaten als indizierte Eigenschaft mit dem Namen "Item" aufgeführt. Beim Entwickeln einer Klassenbibliothek kann der Name des Indexers in den Metadaten jedoch mithilfe des IndexerNameAttribute-Attributs geändert werden. Die String-Klasse verfügt z. B. über einen Indexer mit dem Namen Chars. Indizierte Eigenschaften, die in anderen Sprachen als C# erstellt wurden, können ebenfalls andere Namen anstelle von Item verwenden. 

Um zu ermitteln, ob ein Typ über eine Standardeigenschaft verfügt, verwenden Sie die GetCustomAttributes(Type, Boolean)-Methode und überprüfen das DefaultMemberAttribute-Attribut. Wenn der Typ ein DefaultMemberAttribute besitzt, gibt die MemberName-Eigenschaft den Namen der Standardeigenschaft zurück.

Im folgenden Beispiel werden das Type-Objekt einer benutzerdefinierten Klasse und die Eigenschaft dieser Klasse abgerufen sowie der Eigenschaftenname und -typ angezeigt, die durch die an GetProperty übergebenen Argumente angegeben wurden.


using System;
using System.Reflection;
class MyClass1
{         
    private int [,] myArray = {{1,2},{3,4}}; 
    // Declare an indexer.
    public int this [int i,int j]   
    {
        get 
        {
            return myArray[i,j];
        }
        set 
        {
            myArray[i,j] = value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        { 
            // Get the Type object.
            Type myType=typeof(MyClass1);       
            Type[] myTypeArr = new Type[2];
            // Create an instance of a Type array.
            myTypeArr.SetValue(typeof(int),0);            
            myTypeArr.SetValue(typeof(int),1);
            // Get the PropertyInfo object for the indexed property Item, which has two integer parameters. 
            PropertyInfo myPropInfo = myType.GetProperty("Item", myTypeArr);
            // Display the property.
            Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.ToString());
        }           
        catch(NullReferenceException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Source : {0}" , e.Source);
            Console.WriteLine("Message : {0}" , e.Message);
        }
    }
}


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

class MyClass1
{
    private int myArray[,] =  {{1, 2}, {3, 4}};
    // Declare an indexer.
    /** @property 
     */
    public int get_Item(int i, int j)
    {
        return myArray[i, j];
    } //Item

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

public class MyTypeClass
{
    public static void main(String[] args)
    {
        try {
            // Get the Type object.
            Type myType = MyClass1.class.ToType();
            Type myTypeArr[] = new Type[2];
            // Create an instance of a Type array.
            myTypeArr.SetValue(int.class.ToType(), 0);
            myTypeArr.SetValue(int.class.ToType(), 1);
            // Get the PropertyInfo object for the indexed property Item,
            // which has two integer parameters. 
            PropertyInfo myPropInfo = myType.GetProperty("Item", myTypeArr);
            // Display the property.
            Console.WriteLine("The {0} property exists in MyClass1.",
                myPropInfo.ToString());
        }
        catch (NullReferenceException e) {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Source : {0}", e.get_Source());
            Console.WriteLine("Message : {0}", e.get_Message());
        }
    } //main
} //MyTypeClass


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0
Anzeigen: