Type.GetNestedTypes Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera typy zagnieżdżone w bieżącym obiekcie Type.
Przeciążenia
GetNestedTypes() |
Zwraca typy publiczne zagnieżdżone w bieżącym obiekcie Type. |
GetNestedTypes(BindingFlags) |
Po przesłonięciu w klasie pochodnej wyszukuje typy zagnieżdżone w bieżącym Typeobiekcie przy użyciu określonych ograniczeń powiązania. |
GetNestedTypes()
- Źródło:
- Type.cs
- Źródło:
- Type.cs
- Źródło:
- Type.cs
Zwraca typy publiczne zagnieżdżone w bieżącym obiekcie Type.
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()
Zwraca
Tablica Type obiektów reprezentujących typy publiczne zagnieżdżone w bieżącym Type (wyszukiwanie nie jest rekursywne) lub pustą tablicę typu Type , jeśli żadne typy publiczne nie są zagnieżdżone w bieżącym Typeobiekcie .
Implementuje
Przykłady
W poniższym przykładzie zdefiniowano klasę zagnieżdżonych i klasę struct
in MyClass
, a następnie uzyskuje obiekty zagnieżdżonych typów przy użyciu typu 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
Uwagi
W przypadku platformy .NET 6 i starszych wersji GetNestedTypes metoda nie zwraca typów w określonej kolejności, takich jak alfabetyczne lub kolejność deklaracji. Kod nie może zależeć od kolejności zwracanych typów, ponieważ ta kolejność różni się. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.
Zwracane są tylko typy publiczne natychmiast zagnieżdżone w bieżącym typie; wyszukiwanie nie jest rekursywne.
W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get
metody podczas odzwierciedlania typu.
Typ elementu członkowskiego | Static | Niestatyczna |
---|---|---|
Konstruktor | Nie | Nie |
Pole | Nie | Tak. Pole jest zawsze ukryte przez nazwę i podpis. |
Zdarzenie | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej. |
Metoda | Nie | Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis. |
Typu zagnieżdżony | Nie | Nie |
Właściwość | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej. |
Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.
W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.
Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje zagnieżdżone typy ograniczenia klasy.
Jeśli zagnieżdżony jest typ ogólny , metoda ta zwraca jego definicję typu ogólnego. Ta zasada obowiązuje, nawet jeśli otaczający typ ogólny jest skonstruowany jako zamknięty.
Uwaga
Jeśli bieżący Type reprezentuje typ ogólny zdefiniowany w języku C#, Visual Basic lub C++, jego zagnieżdżone typy są ogólne, nawet jeśli nie mają własnych parametrów ogólnych. Niekoniecznie dotyczy to typów zagnieżdżonych zdefiniowanych w zestawach dynamicznych lub skompilowanych za pomocą Ilasm.exe (IL Assembler).
Aby uzyskać informacje na temat zagnieżdżonych typów ogólnych i konstruowania zagnieżdżonych typów ogólnych z ich ogólnych definicji typów, zobacz MakeGenericType.
Zobacz też
Dotyczy
GetNestedTypes(BindingFlags)
- Źródło:
- Type.cs
- Źródło:
- Type.cs
- Źródło:
- Type.cs
Po przesłonięciu w klasie pochodnej wyszukuje typy zagnieżdżone w bieżącym Typeobiekcie przy użyciu określonych ograniczeń powiązania.
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
Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.
-lub-
Default aby zwrócić null
wartość .
Zwraca
Tablica Type obiektów reprezentujących wszystkie typy zagnieżdżone w bieżącym Type , które są zgodne z określonymi ograniczeniami powiązania (wyszukiwanie nie jest rekursywne) lub pustą tablicą typu Type, jeśli nie zostaną znalezione żadne zagnieżdżone typy zgodne z ograniczeniami powiązania.
Implementuje
Przykłady
W poniższym przykładzie są tworzone dwie zagnieżdżone klasy publiczne i dwie zagnieżdżone klasy chronione oraz wyświetlane informacje dla klas, które odpowiadają określonym ograniczeniom powiązania.
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.
Uwagi
Wyszukiwanie zagnieżdżonych typów nie jest rekursywne.
W przypadku platformy .NET 6 i starszych wersji GetNestedTypes metoda nie zwraca typów w określonej kolejności, takich jak alfabetyczne lub kolejność deklaracji. Kod nie może zależeć od kolejności zwracanych typów, ponieważ ta kolejność różni się. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.
Następujące BindingFlags flagi filtru mogą służyć do definiowania typów zagnieżdżonych do uwzględnienia w wyszukiwaniu:
Musisz określić jedną z BindingFlags.Public opcji lub BindingFlags.NonPublic uzyskać zwrot.
Określ BindingFlags.Public , aby uwzględnić publiczne zagnieżdżone typy w wyszukiwaniu.
Określ BindingFlags.NonPublic , aby uwzględnić w wyszukiwaniu typy niezagnieżdżone (czyli prywatne, wewnętrzne i chronione zagnieżdżone).
Ta metoda zwraca tylko zagnieżdżone typy bieżącego typu. Nie wyszukuje klas bazowych bieżącego typu. Aby znaleźć typy zagnieżdżone w klasach bazowych, należy przejść przez hierarchię dziedziczenia, wywołując GetNestedTypes na każdym poziomie.
BindingFlags.Instance i BindingFlags.Static są ignorowane.
Wywołanie tej metody tylko za pomocą flagi BindingFlags.Public lub tylko BindingFlags.NonPublic flaga zwróci określone zagnieżdżone typy i nie wymaga żadnych innych flag.
Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje zagnieżdżone typy ograniczenia klasy.
Jeśli zagnieżdżony jest typ ogólny , metoda ta zwraca jego definicję typu ogólnego. Ta zasada obowiązuje, nawet jeśli otaczający typ ogólny jest skonstruowany jako zamknięty.
Uwaga
Jeśli bieżący Type reprezentuje typ ogólny zdefiniowany w języku C#, Visual Basic lub C++, jego zagnieżdżone typy są ogólne, nawet jeśli nie mają własnych parametrów ogólnych. Niekoniecznie dotyczy to typów zagnieżdżonych zdefiniowanych w zestawach dynamicznych lub skompilowanych za pomocą Ilasm.exe (IL Assembler).
Aby uzyskać informacje na temat zagnieżdżonych typów ogólnych i konstruowania zagnieżdżonych typów ogólnych z ich ogólnych definicji typów, zobacz MakeGenericType.