Auf Englisch lesen

Teilen über


Type.GetNestedTypes Methode

Definition

Ruft die im aktuellen Type geschachtelten Typen ab.

Überlädt

GetNestedTypes()

Gibt die im aktuellen Type geschachtelten öffentlichen Typen zurück.

GetNestedTypes(BindingFlags)

Sucht beim Überschreiben in einer abgeleiteten Klasse unter Verwendung der angegebenen Bindungseinschränkungen die im aktuellen Type geschachtelten Typen.

GetNestedTypes()

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

Gibt die im aktuellen Type geschachtelten öffentlichen Typen zurück.

C#
public Type[] GetNestedTypes();

Gibt zurück

Type[]

Ein Array von Type-Objekten, das die im aktuellen Type geschachtelten öffentlichen Typen darstellt (die Suche ist nicht rekursiv) oder ein leeres Array vom Typ Type, wenn im aktuellen Type keine öffentlichen Typen geschachtelt sind.

Implementiert

Beispiele

Im folgenden Beispiel werden eine geschachtelte Klasse und eine struct in MyClassdefiniert. Anschließend werden Objekte der geschachtelten Typen mithilfe des Typs von MyClassabgerufen.

C#
using System;
using System.Reflection;
public class MyClass
{
    public class NestClass
    {
        public static int myPublicInt=0;
    }
    public struct NestStruct
    {
        public static int myPublicInt=0;
    }
}

public class MyMainClass
{
    public static void Main()
    {
        try
        {
            // Get the Type object corresponding to MyClass.
            Type myType=typeof(MyClass);
            // Get an array of nested type objects in MyClass.
            Type[] nestType=myType.GetNestedTypes();
            Console.WriteLine("The number of nested types is {0}.", nestType.Length);
            foreach(Type t in nestType)
                Console.WriteLine("Nested type is {0}.", t.ToString());
        }
        catch(Exception e)
        {
            Console.WriteLine("Error"+e.Message);
        }
    }
}

Hinweise

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

Nur die öffentlichen Typen, die sofort im aktuellen Typ geschachtelt sind, werden zurückgegeben. die Suche ist nicht rekursiv.

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. Die 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. Die 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 Typparameter in der Definition eines generischen Typs oder einer generischen Type Methode darstellt, durchsucht diese Methode die geschachtelten Typen der Klasseneinschränkung.

Wenn ein geschachtelter Typ generisch ist, gibt diese Methode ihre generische Typdefinition zurück. Dies gilt auch, wenn der einschließende generische Typ ein geschlossener konstruierter Typ ist.

Hinweis

Wenn der aktuelle einen generischen Type Typ darstellt, der in C#, Visual Basic oder C++ definiert ist, sind alle geschachtelten Typen generisch, auch wenn sie keine generischen Parameter besitzen. Dies gilt nicht unbedingt für geschachtelte Typen, die in dynamischen Assemblys definiert oder mit dem Ilasm.exe (IL Assembler) kompiliert wurden.

Informationen zu geschachtelten generischen Typen und zum Erstellen geschachtelter generischer Typen aus ihren generischen Typdefinitionen finden Sie unter MakeGenericType.

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

GetNestedTypes(BindingFlags)

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

Sucht beim Überschreiben in einer abgeleiteten Klasse unter Verwendung der angegebenen Bindungseinschränkungen die im aktuellen Type geschachtelten Typen.

C#
public abstract Type[] GetNestedTypes(System.Reflection.BindingFlags bindingAttr);

Parameter

bindingAttr
BindingFlags

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

- oder -

Default, damit null zurückgegeben wird.

Gibt zurück

Type[]

Ein Array von Type-Objekten, das alle im aktuellen Type geschachtelten Typen darstellt, die mit den angegebenen Bindungseinschränkungen übereinstimmen (die Suche ist nicht rekursiv) oder ein leeres Array vom Typ Type, wenn keine geschachtelten Typen gefunden werden, die mit den Bindungseinschränkungen übereinstimmen.

Implementiert

Beispiele

Im folgenden Beispiel werden zwei geschachtelte öffentliche Klassen und zwei geschachtelte geschützte Klassen erstellt und Informationen für Klassen angezeigt, die den angegebenen Bindungseinschränkungen entsprechen.

C#
using System;
using System.Reflection;

// Create a class with 2 nested public and 2 nested protected classes.
public class MyTypeClass
{
    public class Myclass1
    {
    }

    public class Myclass2
    {
    }

    protected class MyClass3
    {
    }

    protected class MyClass4
    {
    }
}

public class TypeMain
{
    public static void Main()
    {
        Type myType = (typeof(MyTypeClass));
        // Get the public nested classes.
        Type[] myTypeArray = myType.GetNestedTypes(BindingFlags.Public);
        Console.WriteLine("The number of nested public classes is {0}.", myTypeArray.Length);
        // Display all the public nested classes.
        DisplayTypeInfo(myTypeArray);
        Console.WriteLine();

        // Get the nonpublic nested classes.
        Type[] myTypeArray1 = myType.GetNestedTypes(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of nested protected classes is {0}.", myTypeArray1.Length);
        // Display all the nonpublic nested classes.
        DisplayTypeInfo(myTypeArray1);		
    }

    public static void DisplayTypeInfo(Type[] myArrayType)
    {
        // Display the information for all the nested classes.
        foreach (var t in myArrayType)
            Console.WriteLine("The name of the nested class is {0}.", t.FullName);
    }
}
// The example displays the following output:
//       The number of public nested classes is 2.
//       The name of the nested class is MyTypeClass+Myclass1.
//       The name of the nested class is MyTypeClass+Myclass2.
//
//       The number of protected nested classes is 2.
//       The name of the nested class is MyTypeClass+MyClass3.
//       The name of the nested class is MyTypeClass+MyClass4.

Hinweise

Die Suche nach geschachtelten Typen ist nicht rekursiv.

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

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

Diese Methode gibt nur die geschachtelten Typen des aktuellen Typs zurück. Die Basisklassen des aktuellen Typs werden nicht durchsucht. Um Typen zu finden, die in Basisklassen geschachtelt sind, müssen Sie die Vererbungshierarchie durchlaufen und auf jeder Ebene aufrufen GetNestedTypes .

BindingFlags.Instance und BindingFlags.Static werden ignoriert.

Wenn Diese Methode nur mit dem BindingFlags.Public -Flag oder nur dem BindingFlags.NonPublic -Flag aufgerufen wird, werden die angegebenen geschachtelten Typen zurückgegeben, und es sind keine weiteren Flags erforderlich.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

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

Wenn ein geschachtelter Typ generisch ist, gibt diese Methode ihre generische Typdefinition zurück. Dies gilt auch, wenn der einschließende generische Typ ein geschlossener konstruierter Typ ist.

Hinweis

Wenn der aktuelle einen generischen Type Typ darstellt, der in C#, Visual Basic oder C++ definiert ist, sind alle geschachtelten Typen generisch, auch wenn sie keine generischen Parameter besitzen. Dies gilt nicht unbedingt für geschachtelte Typen, die in dynamischen Assemblys definiert oder mit dem Ilasm.exe (IL Assembler) kompiliert wurden.

Informationen zu geschachtelten generischen Typen und zum Erstellen geschachtelter generischer Typen aus ihren generischen Typdefinitionen finden Sie unter MakeGenericType.

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