Type.GetNestedTypes Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar de typer som är kapslade i den aktuella Type.
Överlagringar
| Name | Description |
|---|---|
| GetNestedTypes() |
Returnerar de offentliga typer som är kapslade i den aktuella Type. |
| GetNestedTypes(BindingFlags) |
När du åsidosättas i en härledd klass söker du efter de typer som är kapslade i den aktuella Type, med hjälp av de angivna bindningsbegränsningarna. |
GetNestedTypes()
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
Returnerar de offentliga typer som är kapslade i den aktuella 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()
Returer
En matris med Type objekt som representerar de offentliga typer som är kapslade i den aktuella Type (sökningen är inte rekursiv) eller en tom matris av typen Type om inga offentliga typer är kapslade i den aktuella Type.
Implementeringar
- Attribut
Exempel
I följande exempel definieras en kapslad klass och en struct i MyClassoch hämtar sedan objekt av kapslade typer med hjälp av MyClasstypen .
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
Kommentarer
I .NET 6 och tidigare versioner returnerar metoden GetNestedTypes inte typer i en viss ordning, till exempel alfabetisk ordning eller deklarationsordning. Koden får inte vara beroende av i vilken ordning typerna returneras, eftersom den ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.
Endast de offentliga typer som är direkt kapslade i den aktuella typen returneras. sökningen är inte rekursiv.
I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.
| Medlemstyp | Static | Icke-statisk |
|---|---|---|
| Constructor | No | No |
| Fält | No | Yes. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature). |
| Händelse | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
| Metod | No | Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature. |
| Kapslad typ | No | No |
| Fastighet | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.
För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.
Anpassade attribut ingår inte i det vanliga typsystemet.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom de kapslade typerna av klassvillkoret.
Om en kapslad typ är generisk returnerar den här metoden dess generiska typdefinition. Detta gäller även om den omslutande generiska typen är en stängd konstruktionstyp.
Note
Om den aktuella Type representerar en allmän typ som definierats i C#, Visual Basic eller C++, är dess kapslade typer alla generiska även om de inte har några egna generiska parametrar. Detta gäller inte nödvändigtvis kapslade typer som definierats i dynamiska sammansättningar eller kompilerats med Ilasm.exe (IL Assembler).
Information om kapslade generiska typer och om hur du skapar kapslade generiska typer från deras generiska typdefinitioner finns i MakeGenericType.
Se även
Gäller för
GetNestedTypes(BindingFlags)
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
När du åsidosättas i en härledd klass söker du efter de typer som är kapslade i den aktuella Type, med hjälp av de angivna bindningsbegränsningarna.
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()
Parametrar
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera null.
Returer
En matris med Type objekt som representerar alla typer kapslade i strömmen Type som matchar de angivna bindningsbegränsningarna (sökningen är inte rekursiv) eller en tom matris av typen Type, om inga kapslade typer hittas som matchar bindningsbegränsningarna.
Implementeringar
- Attribut
Exempel
I följande exempel skapas två kapslade offentliga klasser och två kapslade skyddade klasser och visar information för klasser som matchar de angivna bindningsbegränsningarna.
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.
Kommentarer
Sökningen efter kapslade typer är inte rekursiv.
I .NET 6 och tidigare versioner returnerar metoden GetNestedTypes inte typer i en viss ordning, till exempel alfabetisk ordning eller deklarationsordning. Koden får inte vara beroende av i vilken ordning typerna returneras, eftersom den ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.
Följande BindingFlags filterflaggor kan användas för att definiera vilka kapslade typer som ska ingå i sökningen:
Du måste ange antingen BindingFlags.Public eller BindingFlags.NonPublic för att få en retur.
Ange BindingFlags.Public att offentliga kapslade typer ska inkluderas i sökningen.
Ange BindingFlags.NonPublic om du vill inkludera icke-offentliga kapslade typer (dvs. privata, interna och skyddade kapslade typer) i sökningen.
Den här metoden returnerar endast kapslade typer av den aktuella typen. Den söker inte efter basklasserna av den aktuella typen. Om du vill hitta typer som är kapslade i basklasser måste du gå igenom arvshierarkin och anropa GetNestedTypes på varje nivå.
BindingFlags.Instance och BindingFlags.Static ignoreras.
Om du anropar den här metoden med endast BindingFlags.Public flaggan eller bara BindingFlags.NonPublic flaggan returneras de angivna kapslade typerna och kräver inga andra flaggor.
Mer information finns i System.Reflection.BindingFlags.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom de kapslade typerna av klassvillkoret.
Om en kapslad typ är generisk returnerar den här metoden dess generiska typdefinition. Detta gäller även om den omslutande generiska typen är en stängd konstruktionstyp.
Note
Om den aktuella Type representerar en allmän typ som definierats i C#, Visual Basic eller C++, är dess kapslade typer alla generiska även om de inte har några egna generiska parametrar. Detta gäller inte nödvändigtvis kapslade typer som definierats i dynamiska sammansättningar eller kompilerats med Ilasm.exe (IL Assembler).
Information om kapslade generiska typer och om hur du skapar kapslade generiska typer från deras generiska typdefinitioner finns i MakeGenericType.