Type.GetNestedTypes Metoda

Definice

Získá typy vnořené v aktuálním Typeobjektu .

Přetížení

GetNestedTypes()

Vrátí veřejné typy vnořené v aktuálním Typesouboru .

GetNestedTypes(BindingFlags)

Při přepsání v odvozené třídě vyhledá typy vnořené v aktuální Type, pomocí zadaných vazeb omezení.

GetNestedTypes()

Vrátí veřejné typy vnořené v aktuálním Typesouboru .

public:
 cli::array <Type ^> ^ GetNestedTypes();
public:
 virtual cli::array <Type ^> ^ GetNestedTypes();
public Type[] GetNestedTypes ();
member this.GetNestedTypes : unit -> Type[]
abstract member GetNestedTypes : unit -> Type[]
override this.GetNestedTypes : unit -> Type[]
Public Function GetNestedTypes () As Type()

Návraty

Type[]

Pole Type objektů představující veřejné typy vnořené do aktuálního Type objektu (hledání není rekurzivní) nebo prázdné pole typu Type , pokud nejsou v aktuálním Typeobjektu vnořené žádné veřejné typy.

Implementuje

Příklady

Následující příklad definuje vnořenou třídu a struct v souboru a pak získá objekty vnořených typů pomocí typu MyClass.MyClass

using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
public:
   ref class NestClass
   {
      public:
         static int myPublicInt = 0;
   };

   ref struct NestStruct
   {
      public:
         static int myPublicInt = 0;
   };
};

int main()
{
   try
   {
      // Get the Type object corresponding to MyClass.
      Type^ myType = MyClass::typeid;
      
      // Get an array of nested type objects in MyClass.
      array<Type^>^nestType = myType->GetNestedTypes();
      Console::WriteLine( "The number of nested types is {0}.", nestType->Length );
      System::Collections::IEnumerator^ myEnum = nestType->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Type^ t = safe_cast<Type^>(myEnum->Current);
         Console::WriteLine( "Nested type is {0}.", t );
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Error {0}", e->Message );
   }
}
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);
        }
    }
}
Imports System.Reflection

Public Class MyClass1
    Public Class NestClass
        Public Shared myPublicInt As Integer = 0
    End Class

    Public Structure NestStruct
        Public myPublicInt As Integer
    End Structure 'NestStruct
End Class

Public Class MyMainClass
    Public Shared Sub Main()
        Try
            ' Get the Type object corresponding to MyClass.
            Dim myType As Type = GetType(MyClass1)
            ' Get an array of nested type objects in MyClass.                 
            Dim nestType As Type() = myType.GetNestedTypes()
            Console.WriteLine("The number of nested types is {0}.", nestType.Length)
            Dim t As Type
            For Each t In nestType
                Console.WriteLine("Nested type is {0}.", t.ToString())
            Next t
        Catch e As Exception
            Console.WriteLine("Error", e.Message.ToString())
        End Try
    End Sub
End Class

Poznámky

V .NET 6 a starších verzích GetNestedTypes metoda nevrací typy v určitém pořadí, jako je abecední pořadí nebo pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém jsou typy vráceny, protože toto pořadí se liší. Od verze .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Jsou vráceny pouze veřejné typy okamžitě vnořené do aktuálního typu; hledání není rekurzivní.

Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při odrazu na typu.

Typ členu Static Nestatický
Konstruktor No No
Pole No Yes. Pole je vždy skrýváno podle názvu a podpisu.
Událost Neuvedeno Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu.
Vnořený typ No No
Vlastnost Neuvedeno Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
  1. Skrývání podle názvu a podpisu bere v úvahu všechny části podpisu včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.

  2. Pro účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.

  3. Vlastní atributy nejsou součástí systému společných typů.

Pokud current Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda prohledá vnořené typy omezení třídy.

Pokud je vnořený typ obecný, vrací tato metoda příslušnou definici obecného typu. To platí i tehdy, je-li nadřazeným obecným typem uzavřený konstruovaný typ.

Poznámka

Pokud aktuální Type představuje obecný typ definovaný v jazyce C#, Visual Basic nebo C++, jsou všechny jeho vnořené typy obecné, i když nemají žádné vlastní obecné parametry. To nemusí nutně platit pro vnořené typy definované v dynamických sestaveních nebo kompilované pomocíIlasm.exe (IL Assembler).

Informace o vnořených obecných typech a o vytváření vnořených obecných typů z jejich definic obecných typů najdete v tématu MakeGenericType.

Viz také

Platí pro

GetNestedTypes(BindingFlags)

Při přepsání v odvozené třídě vyhledá typy vnořené v aktuální Type, pomocí zadaných vazeb omezení.

public:
 abstract cli::array <Type ^> ^ GetNestedTypes(System::Reflection::BindingFlags bindingAttr);
public abstract Type[] GetNestedTypes (System.Reflection.BindingFlags bindingAttr);
abstract member GetNestedTypes : System.Reflection.BindingFlags -> Type[]
Public MustOverride Function GetNestedTypes (bindingAttr As BindingFlags) As Type()

Parametry

bindingAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují, jak se provádí hledání.

-nebo-

Default a vrátí nullse .

Návraty

Type[]

Pole Type objektů představujících všechny typy vnořené v aktuálním stavu Type , které odpovídají zadaným omezením vazby (hledání není rekurzivní), nebo prázdné pole typu Type, pokud nejsou nalezeny žádné vnořené typy, které odpovídají omezením vazby.

Implementuje

Příklady

Následující příklad vytvoří dvě vnořené veřejné třídy a dvě vnořené chráněné třídy a zobrazí informace pro třídy, které odpovídají zadaným omezením vazby.

using namespace System;
using namespace System::Reflection;

// Create a class with two nested public classes and two nested protected classes.
public ref class MyTypeClass
{
   public:
      ref class Myclass1{};
   
   public:
      ref class Myclass2{};
   
   protected:
      ref class MyClass3{};
   
   protected:
      ref class MyClass4{};
};

void DisplayTypeInfo(array<Type^>^ myArrayType)
{
   // Display the information for all the nested classes.
   for each (Type^ t in myArrayType)
      Console::WriteLine( "The name of the nested class is {0}.", t->FullName);
}

int main()
{
   Type^ myType = MyTypeClass::typeid;
   
   // Get the public nested classes.
   array<Type^>^myTypeArray = myType->GetNestedTypes( static_cast<BindingFlags>(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.
   array<Type^>^myTypeArray1 = myType->GetNestedTypes( static_cast<BindingFlags>(BindingFlags::NonPublic));
   Console::WriteLine( "The number of nested protected classes is {0}.", myTypeArray1->Length );
   
   // Display all the nonpublic nested classes.
   DisplayTypeInfo( myTypeArray1 );
}
// 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.
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.
Imports System.Reflection

' Create a class with three properties.
Public Class MyTypeClass
    Public Class Myclass1
    End Class 

    Public Class Myclass2
    End Class 

    Protected Class MyClass3
    End Class 

    Protected Class MyClass4
    End Class 
End Class 

Public Class TypeMain
    Public Shared Sub Main()
        Dim myType As Type = GetType(MyTypeClass)

        ' Get the public nested classes.
        Dim myTypeArray As Type() = myType.GetNestedTypes((BindingFlags.Public))
        Console.WriteLine("The number of public nested classes is {0}.", myTypeArray.Length.ToString())
        ' Display all the public nested classes.
        DisplayTypeInfo(myTypeArray)
        Console.WriteLine()
        
        ' Get the nonpublic nested classes.
        Dim myTypeArray1 As Type() = myType.GetNestedTypes((BindingFlags.NonPublic))
        Console.WriteLine("The number of protected nested classes is {0}.", myTypeArray1.Length.ToString())
        ' Display  the information for all nested classes.
        DisplayTypeInfo(myTypeArray1)
    End Sub 

    Public Shared Sub DisplayTypeInfo(ByVal myArrayType() As Type)
        ' Display the information for all nested classes.
        For Each t In myArrayType
            Console.WriteLine("The name of the nested class is {0}.", t.FullName)
        Next 
    End Sub 
End Class  
' 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.

Poznámky

Hledání vnořených typů není rekurzivní.

V .NET 6 a starších verzích GetNestedTypes metoda nevrací typy v určitém pořadí, jako je abecední pořadí nebo pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém jsou typy vráceny, protože toto pořadí se liší. Od verze .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.

Následující BindingFlags příznaky filtru lze použít k definování vnořených typů, které se mají zahrnout do hledání:

Tato metoda vrátí pouze vnořené typy aktuálního typu. Neprohledává základní třídy aktuálního typu. Pokud chcete najít typy, které jsou vnořené v základních třídách, musíte procházet hierarchii dědičnosti a volat GetNestedTypes na každé úrovni.

BindingFlags.Instance a BindingFlags.Static jsou ignorovány.

Volání této metody pouze s příznakem BindingFlags.Public nebo pouze BindingFlags.NonPublic příznakem vrátí zadané vnořené typy a nevyžaduje žádné další příznaky.

Další informace naleznete v tématu System.Reflection.BindingFlags.

Pokud current Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda prohledá vnořené typy omezení třídy.

Pokud je vnořený typ obecný, vrací tato metoda příslušnou definici obecného typu. To platí i tehdy, je-li nadřazeným obecným typem uzavřený konstruovaný typ.

Poznámka

Pokud aktuální Type představuje obecný typ definovaný v jazyce C#, Visual Basic nebo C++, jsou všechny jeho vnořené typy obecné, i když nemají žádné vlastní obecné parametry. To nemusí nutně platit pro vnořené typy definované v dynamických sestaveních nebo kompilované pomocíIlasm.exe (IL Assembler).

Informace o vnořených obecných typech a o vytváření vnořených obecných typů z jejich definic obecných typů najdete v tématu MakeGenericType.

Viz také

Platí pro