Type.GetNestedTypes Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lekéri az aktuálisba Typebeágyazott típusokat.
Túlterhelések
| Name | Description |
|---|---|
| GetNestedTypes() |
Az aktuálisban Typebeágyazott nyilvános típusokat adja vissza. |
| GetNestedTypes(BindingFlags) |
Ha egy származtatott osztályban felül van bírálva, az aktuálisban Typebeágyazott típusokat keresi a megadott kötési megkötések használatával. |
GetNestedTypes()
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Az aktuálisban Typebeágyazott nyilvános típusokat adja vissza.
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()
Válaszok
Az aktuálisban Type beágyazott nyilvános típusokat képviselő objektumtömb Type (a keresés nem rekurzív), vagy üres típusú Type tömb, ha az aktuálisban Typenincsenek beágyazva nyilvános típusok.
Megvalósítás
- Attribútumok
Példák
Az alábbi példa egy beágyazott osztályt és egy struct int MyClasshatároz meg, majd beolvasja a beágyazott típusok objektumait MyClassa típus használatával.
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
Megjegyzések
A .NET 6-os és korábbi verzióiban a GetNestedTypes metódus nem ad vissza típusokat egy adott sorrendben, például betűrendben vagy deklarációs sorrendben. A kód nem függ a visszaadott típusok sorrendjétől, mert ez a sorrend eltérő. A 7. .NET kezdve azonban a rendezés determinisztikus a szerelvény metaadatainak sorrendje alapján.
Csak az aktuális típusba közvetlenül beágyazott nyilvános típusok lesznek visszaadva; a keresés nem rekurzív.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Esemény | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Ingatlan | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
Az egyéni attribútumok nem részei a gyakori típusrendszernek.
Ha az aktuális Type érték egy típusparamétert jelöl egy általános vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer beágyazott típusait.
Ha egy beágyazott típus általános, ez a metódus visszaadja az általános típusdefinícióját. Ez akkor is igaz, ha az általános típus zárt építésű típus.
Note
Ha az aktuális Type egy C#, Visual Basic vagy C++ nyelven definiált általános típust jelöl, a beágyazott típusok mind általánosak, még akkor is, ha nincsenek saját általános paraméterek. Ez nem feltétlenül igaz a dinamikus szerelvényekben definiált vagy a Ilasm.exe (IL-összeszerelővel) lefordított beágyazott típusokra.
A beágyazott általános típusokról és a beágyazott általános típusok általános típusdefiníciókból való felépítéséről további információt a következő témakörben talál MakeGenericType: .
Lásd még
A következőre érvényes:
GetNestedTypes(BindingFlags)
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Ha egy származtatott osztályban felül van bírálva, az aktuálisban Typebeágyazott típusokat keresi a megadott kötési megkötések használatával.
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()
Paraméterek
- bindingAttr
- BindingFlags
A számbavételi értékek bitenkénti kombinációja, amely meghatározza a keresés menetét.
-vagy-
Default visszatéréshez null.
Válaszok
Egy objektumtömb Type , amely az aktuálisban Type beágyazott összes típust képviseli, amely megfelel a megadott kötési korlátozásoknak (a keresés nem rekurzív), vagy üres típusú Typetömb, ha nem található beágyazott típusok, amelyek megfelelnek a kötési korlátozásoknak.
Megvalósítás
- Attribútumok
Példák
Az alábbi példa két beágyazott nyilvános osztályt és két beágyazott védett osztályt hoz létre, és megjeleníti a megadott kötési korlátozásoknak megfelelő osztályok adatait.
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.
Megjegyzések
A beágyazott típusok keresése nem rekurzív.
A .NET 6-os és korábbi verzióiban a GetNestedTypes metódus nem ad vissza típusokat egy adott sorrendben, például betűrendben vagy deklarációs sorrendben. A kód nem függ a visszaadott típusok sorrendjétől, mert ez a sorrend eltérő. A 7. .NET kezdve azonban a rendezés determinisztikus a szerelvény metaadatainak sorrendje alapján.
A következő BindingFlags szűrőjelölőkkel határozhatja meg, hogy mely beágyazott típusok szerepeljenek a keresésben:
Meg kell adnia vagy BindingFlags.PublicBindingFlags.NonPublic be kell szereznie a visszatérést.
Adja meg BindingFlags.Public , hogy a keresésbe belefoglalja a nyilvános beágyazott típusokat.
Adja meg BindingFlags.NonPublic , hogy nem nyilvános beágyazott típusok (azaz privát, belső és védett beágyazott típusok) szerepeljenek a keresésben.
Ez a metódus csak az aktuális típus beágyazott típusait adja vissza. Nem keres az aktuális típus alaposztályaiban. Az alaposztályokban beágyazott típusok megkereséséhez végig kell járnia az öröklési hierarchiát, minden szinten hívva GetNestedTypes .
BindingFlags.Instance és BindingFlags.Static figyelmen kívül hagyják.
Ha ezt a metódust csak a BindingFlags.Public jelölővel vagy csak a BindingFlags.NonPublic jelölővel hívja meg, a megadott beágyazott típusokat adja vissza, és nem igényel más jelzőket.
További információért lásd a System.Reflection.BindingFlags jelű részt.
Ha az aktuális Type érték egy típusparamétert jelöl egy általános vagy általános metódus definíciójában, ez a metódus megkeresi az osztálykényszer beágyazott típusait.
Ha egy beágyazott típus általános, ez a metódus visszaadja az általános típusdefinícióját. Ez akkor is igaz, ha az általános típus zárt építésű típus.
Note
Ha az aktuális Type egy C#, Visual Basic vagy C++ nyelven definiált általános típust jelöl, a beágyazott típusok mind általánosak, még akkor is, ha nincsenek saját általános paraméterek. Ez nem feltétlenül igaz a dinamikus szerelvényekben definiált vagy a Ilasm.exe (IL-összeszerelővel) lefordított beágyazott típusokra.
A beágyazott általános típusokról és a beágyazott általános típusok általános típusdefiníciókból való felépítéséről további információt a következő témakörben talál MakeGenericType: .