Type.GetNestedTypes Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá typy vnořené v aktuálním Type.
Přetížení
| Name | Description |
|---|---|
| GetNestedTypes() |
Vrátí veřejné typy vnořené do aktuálního Type. |
| GetNestedTypes(BindingFlags) |
Při přepsání v odvozené třídě vyhledá typy vnořené v aktuálním Type, pomocí zadaných omezení vazby. |
GetNestedTypes()
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Vrátí veřejné typy vnořené do aktuálního Type.
public:
cli::array <Type ^> ^ GetNestedTypes();
public:
virtual cli::array <Type ^> ^ GetNestedTypes();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes)]
public Type[] GetNestedTypes();
public Type[] GetNestedTypes();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes)>]
member this.GetNestedTypes : unit -> Type[]
member this.GetNestedTypes : unit -> Type[]
abstract member GetNestedTypes : unit -> Type[]
override this.GetNestedTypes : unit -> Type[]
Public Function GetNestedTypes () As Type()
Návraty
Pole Type objektů představujících veřejné typy vnořené v aktuálním Type objektu (vyhledávání není rekurzivní) nebo prázdné pole typu Type , pokud nejsou v aktuálním stavu Typevnořené žádné veřejné typy .
Implementuje
- Atributy
Příklady
Následující příklad definuje vnořenou třídu a struct in MyClassa pak získá objekty vnořených typů pomocí typu MyClass.
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 metoda GetNestedTypes 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 se vrátí typy, protože se tato objednávka liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.
Vrátí se 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 reflexi typu.
| Typ členu | Static | Nestatické |
|---|---|---|
| Konstruktor | No | No |
| Pole | No | Yes. Pole se vždy skryje podle názvu a signatury. |
| Událost | Není relevantní | Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže. |
| Metoda | No | Yes. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu. |
| Vnořený typ | No | No |
| Vlastnictví | Není relevantní | Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže. |
Funkce skrytí podle jména a podpisu zohledňuje 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í.
Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.
Vlastní atributy nejsou součástí systému běžných typů.
Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda vyhledá vnořené typy omezení třídy.
Pokud je vnořený typ obecný, vrátí tato metoda definici obecného typu. To platí i v případě, že uzavřený obecný typ je uzavřený konstruovaný typ.
Note
Pokud aktuální Type představuje obecný typ definovaný v jazyce C#, Visual Basic nebo C++, jsou jeho vnořené typy obecné, i když nemají 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ýchobecnýchch MakeGenericType
Viz také
Platí pro
GetNestedTypes(BindingFlags)
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Při přepsání v odvozené třídě vyhledá typy vnořené v aktuálním Type, pomocí zadaných omezení vazby.
public:
abstract cli::array <Type ^> ^ GetNestedTypes(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes)]
public abstract Type[] GetNestedTypes(System.Reflection.BindingFlags bindingAttr);
public abstract Type[] GetNestedTypes(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes)>]
abstract member GetNestedTypes : System.Reflection.BindingFlags -> Type[]
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í způsob provedení hledání.
nebo
Default
nullvrátit .
Návraty
Pole Type objektů představujících všechny typy vnořené v aktuálním Type stavu, které odpovídají zadaným omezením vazby (vyhledávání není rekurzivní) nebo prázdné pole typu Type, pokud nejsou nalezeny žádné vnořené typy, které odpovídají omezením vazby.
Implementuje
- Atributy
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 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 metoda GetNestedTypes 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 se vrátí typy, protože se tato objednávka liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.
BindingFlags Následující příznaky filtru lze použít k definování vnořených typů, které se mají zahrnout do hledání:
Je nutné zadat nebo BindingFlags.PublicBindingFlags.NonPublic získat vrácení.
Zadejte BindingFlags.Public , aby se do hledání zahrnuly veřejné vnořené typy.
Zadejte BindingFlags.NonPublic , aby se do hledání zahrnuly nevnořené typy (tj. soukromé, interní a chráněné typy vnořené).
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é do základních tříd, musíte procházet hierarchii dědičnosti voláním GetNestedTypes na každé úrovni.
BindingFlags.Instance a BindingFlags.Static jsou ignorovány.
Volání této metody pouze příznakem BindingFlags.Public nebo pouze BindingFlags.NonPublic příznak vrátí zadané vnořené typy a nevyžaduje žádné jiné příznaky.
Další informace naleznete na System.Reflection.BindingFlags.
Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda vyhledá vnořené typy omezení třídy.
Pokud je vnořený typ obecný, vrátí tato metoda definici obecného typu. To platí i v případě, že uzavřený obecný typ je uzavřený konstruovaný typ.
Note
Pokud aktuální Type představuje obecný typ definovaný v jazyce C#, Visual Basic nebo C++, jsou jeho vnořené typy obecné, i když nemají 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ýchobecnýchch MakeGenericType