Auf Englisch lesen

Teilen über


Type.GetProperties Methode

Definition

Ruft die Eigenschaften des aktuellen Type ab.

Überlädt

GetProperties()

Gibt sämtliche öffentlichen Eigenschaften des aktuellen Type zurück.

GetProperties(BindingFlags)

Sucht beim Überschreiben in einer abgeleiteten Klasse unter Verwendung der angegebenen Bindungseinschränkungen die Eigenschaften des aktuellen Type.

GetProperties()

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Gibt sämtliche öffentlichen Eigenschaften des aktuellen Type zurück.

C#
public System.Reflection.PropertyInfo[] GetProperties();

Gibt zurück

Ein Array von PropertyInfo-Objekten, die alle öffentlichen Eigenschaften des aktuellen Type darstellen.

- oder -

Ein leeres Array vom PropertyInfo-Typ, wenn der aktuelle Type keine öffentlichen Eigenschaften besitzt.

Implementiert

Beispiele

Im folgenden Beispiel wird die Verwendung der GetProperties-Methode gezeigt.

C#
PropertyInfo[] myPropertyInfo;
// Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties();
Console.WriteLine("Properties of System.Type are:");
for (int i = 0; i < myPropertyInfo.Length; i++)
{
    Console.WriteLine(myPropertyInfo[i].ToString());
}

Hinweise

Das Aufrufen dieser Überladung entspricht dem Aufrufen der GetProperties(BindingFlags) Überladung mit einem bindingAttr Argument gleich BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public in C# und BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public in Visual Basic. Es gibt alle öffentlichen instance und statischen Eigenschaften zurück, sowohl die eigenschaften, die durch den typ definiert werden, der durch das aktuelle Type Objekt dargestellt wird, als auch diejenigen, die von seinen Basistypen geerbt werden.

Eine Eigenschaft gilt als öffentlich für Reflektion, wenn sie über mindestens einen accessor verfügt, der öffentlich ist. Andernfalls gilt die Eigenschaft als privat, und Sie müssen (in Visual Basic die Werte mithilfe von kombinieren) verwenden BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static , um sie abzurufen.Or

In .NET 6 und früheren Versionen gibt die GetProperties -Methode keine Eigenschaften in einer bestimmten Reihenfolge zurück, z. B. alphabetisch oder Deklarationsreihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Eigenschaften zurückgegeben werden, da diese Reihenfolge variiert. Ab .NET 7 ist die Reihenfolge jedoch deterministisch, basierend auf der Metadatenreihenfolge in der Assembly.

Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Get Methoden zurückgegeben werden, wenn sie einen Typ reflektieren.

Memberart statischen Nicht statisch
Konstruktor Nein Nein
Feld Nein Ja. Ein Feld wird immer nach Name und Signatur ausgeblendet.
Ereignis Nicht zutreffend Die allgemeine Typsystemregel ist, dass die Vererbung mit der der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als hide-by-name-and-signature. Siehe Hinweis 2 weiter unten.
Methode Nein Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Name oder nach Name und Signatur ausblenden sein.
Geschachtelter Typ Nein Nein
Eigenschaft Nicht zutreffend Die allgemeine Typsystemregel ist, dass die Vererbung mit der der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als hide-by-name-and-signature. Siehe Hinweis 2 weiter unten.
  1. Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwalteter Aufrufkonventionen. Dies ist ein binärer Vergleich.

  2. Für die Reflektion werden Eigenschaften und Ereignisse nach Name und Signatur ausgeblendet. Wenn Sie über eine Eigenschaft mit einem get- und einem set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen get-Accessor verfügt, blendet die abgeleitete Klasseneigenschaft die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter für die Basisklasse zugreifen.

  3. Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.

Wenn der aktuelle einen konstruierten generischen Type Typ darstellt, gibt diese Methode die PropertyInfo Objekte mit den Typparametern zurück, die durch die entsprechenden Typargumente ersetzt werden.

Wenn der aktuelle einen Typparameter in der Definition eines generischen Typs oder einer generischen Type Methode darstellt, durchsucht diese Methode die Eigenschaften der Klasseneinschränkung.

Weitere Informationen

Gilt für:

.NET 10 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetProperties(BindingFlags)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Sucht beim Überschreiben in einer abgeleiteten Klasse unter Verwendung der angegebenen Bindungseinschränkungen die Eigenschaften des aktuellen Type.

C#
public abstract System.Reflection.PropertyInfo[] GetProperties(System.Reflection.BindingFlags bindingAttr);

Parameter

bindingAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.

- oder -

Default, um ein leeres Array zurückzugeben.

Gibt zurück

Ein Array von Objekten, die sämtliche Eigenschaften des aktuellen Type darstellen, die den angegebenen Bindungseinschränkungen entsprechen.

- oder -

Ein leeres Array vom PropertyInfo-Typ, wenn der aktuelle Type keine Eigenschaften besitzt oder keine der Eigenschaften den Bindungseinschränkungen entspricht.

Implementiert

Beispiele

Im folgenden Beispiel wird eine Klasse mit dem Namen PropertyClass definiert, die sechs Eigenschaften enthält: zwei sind öffentlich, eine private, eine ist geschützt, eine ist intern (Friend in Visual Basic) und eine ist intern (Protected Friend in Visual Basic) geschützt. Anschließend werden einige grundlegende Eigenschafteninformationen (Der Eigenschaftenname und -typ, ob lese-/schreibzugriff und die Sichtbarkeit der get Accessoren und set ) für die Eigenschaften angezeigt, die den angegebenen Bindungseinschränkungen entsprechen.

C#
using System;
using System.Reflection;

// Create a class having six properties.
public class PropertyClass
{
    public String Property1
    {
        get { return "hello"; }
    }

    public String Property2
    {
        get { return "hello"; }
    }

    protected String Property3
    {
        get { return "hello"; }
    }

    private Int32 Property4
    {
        get { return 32; }
    }

    internal String Property5
    {
       get { return "value"; }
    }

    protected internal String Property6
    {
       get { return "value"; }
    }
}

public class Example
{
    public static void Main()
    {
        Type t = typeof(PropertyClass);
        // Get the public properties.
        PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public|BindingFlags.Instance);
        Console.WriteLine("The number of public properties: {0}.\n",
                          propInfos.Length);
        // Display the public properties.
        DisplayPropertyInfo(propInfos);

        // Get the nonpublic properties.
        PropertyInfo[] propInfos1 = t.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of non-public properties: {0}.\n",
                          propInfos1.Length);
        // Display all the nonpublic properties.
        DisplayPropertyInfo(propInfos1);
    }

    public static void DisplayPropertyInfo(PropertyInfo[] propInfos)
    {
        // Display information for all properties.
        foreach (var propInfo in propInfos) {
            bool readable = propInfo.CanRead;
            bool writable = propInfo.CanWrite;

            Console.WriteLine("   Property name: {0}", propInfo.Name);
            Console.WriteLine("   Property type: {0}", propInfo.PropertyType);
            Console.WriteLine("   Read-Write:    {0}", readable & writable);
            if (readable) {
               MethodInfo getAccessor = propInfo.GetMethod;
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(getAccessor));
            }
            if (writable) {
               MethodInfo setAccessor = propInfo.SetMethod;
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(setAccessor));
            }
            Console.WriteLine();
        }
    }

    public static String GetVisibility(MethodInfo accessor)
    {
       if (accessor.IsPublic)
          return "Public";
       else if (accessor.IsPrivate)
          return "Private";
       else if (accessor.IsFamily)
          return "Protected";
       else if (accessor.IsAssembly)
          return "Internal/Friend";
       else
          return "Protected Internal/Friend";
    }
}
// The example displays the following output:
//       The number of public properties: 2.
//
//          Property name: Property1
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//          Property name: Property2
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//       The number of non-public properties: 4.
//
//          Property name: Property3
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected
//
//          Property name: Property4
//          Property type: System.Int32
//          Read-Write:    False
//          Visibility:    Private
//
//          Property name: Property5
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Internal/Friend
//
//          Property name: Property6
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected Internal/Friend

Hinweise

Damit die GetProperties(BindingFlags) -Überladung Eigenschafteninformationen erfolgreich abrufen kann, muss das bindingAttr Argument mindestens eine von BindingFlags.Instance und BindingFlags.Staticenthalten, zusammen mit mindestens einem von BindingFlags.NonPublic und BindingFlags.Public.

Die folgenden BindingFlags Filterflags können verwendet werden, um zu definieren, welche Eigenschaften in die Suche einbezogen werden sollen:

  • Geben Sie BindingFlags.Instance an, um instance Methoden einzuschließen.

  • Geben Sie BindingFlags.Static an, um statische Methoden einzuschließen.

  • Geben Sie an BindingFlags.Public , um öffentliche Eigenschaften in die Suche einzuschließen. Eine Eigenschaft gilt als öffentlich für Reflektion, wenn sie über mindestens einen accessor verfügt, der öffentlich ist.

  • Geben Sie an BindingFlags.NonPublic , um nicht öffentliche Eigenschaften (d. h. private, interne und geschützte Eigenschaften) in die Suche einzuschließen. Es werden nur geschützte und interne Eigenschaften für Basisklassen zurückgegeben. Private Eigenschaften für Basisklassen werden nicht zurückgegeben.

  • Geben Sie anBindingFlags.FlattenHierarchy, um und protected statische Member nach oben in der Hierarchie einzuschließenpublic. private Statische Member in geerbten Klassen sind nicht enthalten.

  • Geben Sie BindingFlags.Default allein an, um ein leeres PropertyInfo Array zurückzugeben.

Die folgenden BindingFlags Modifiziererflags können verwendet werden, um die Funktionsweise der Suche zu ändern:

  • BindingFlags.DeclaredOnly , um nur die Eigenschaften zu durchsuchen, die Typefür deklariert sind, und nicht die Eigenschaften, die einfach geerbt wurden.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

In .NET 6 und früheren Versionen gibt die GetProperties -Methode keine Eigenschaften in einer bestimmten Reihenfolge zurück, z. B. alphabetisch oder Deklarationsreihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Eigenschaften zurückgegeben werden, da diese Reihenfolge variiert. Ab .NET 7 ist die Reihenfolge jedoch deterministisch, basierend auf der Metadatenreihenfolge in der Assembly.

Wenn der aktuelle einen konstruierten generischen Type Typ darstellt, gibt diese Methode die PropertyInfo Objekte mit den Typparametern zurück, die durch die entsprechenden Typargumente ersetzt werden.

Wenn der aktuelle einen Typparameter in der Definition eines generischen Typs oder einer generischen Type Methode darstellt, durchsucht diese Methode die Eigenschaften der Klasseneinschränkung.

Weitere Informationen

Gilt für:

.NET 10 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1