Type.GetNestedTypes()方法用于获取嵌套在当前Type中的类型。此方法的重载列表中有2种方法,如下所示:
- GetNestedTypes()方法
- GetNestedTypes(BindingFlags)方法
GetNestedTypes()方法
此方法用于返回嵌套在当前Type中的公共类型。
Syntax: public Type[] GetNestedTypes ();
Return Value: This method returns an array of Type objects representing the public types nested in the current Type (the search is not recursive), or an empty array of type Type if no public types are nested in the current Type.
下面的程序说明了上述方法的用法:
范例1:
// C# program to demonstrate the
// Type.GetNestedTypes() Method
using System;
using System.Globalization;
using System.Reflection;
// Defining class Empty
public class Empty { }
class GFG {
// Main Method
public static void Main()
{
// Declaring and initializing object of Type
Type objType = typeof(Person);
// try-catch block for handling Exception
try {
// Getting array of Method by
// using GetMethods() Method
Type[] type = objType.GetNestedTypes();
// Display the Result
Console.WriteLine("NestedType of current type is: ");
for (int i = 0; i < type.Length; i++)
Console.WriteLine("{0} ", type[i]);
}
// catch ArgumentNullException here
catch (ArgumentNullException e)
{
Console.Write("name is null.");
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Person {
public class Student
{
// string name;
// int roll;
// string dept;
}
public class Teacher
{
// string name;
// string dept;
// int id;
}
}
NestedType of current type is:
Person+Student
Person+Teacher
范例2:
// C# program to demonstrate the
// Type.GetNestedTypes() Method
using System;
using System.Globalization;
using System.Reflection;
// Defining class Empty
public class Empty { }
class GFG {
// Main Method
public static void Main()
{
// Declaring and initializing object of Type
Type objType = typeof(Animal);
// try-catch block for handling Exception
try {
// Getting array of Method by
// using GetMethods() Method
Type[] type = objType.GetNestedTypes();
// Display the Result
Console.WriteLine("NestedType of current type is: ");
for (int i = 0; i < type.Length; i++)
Console.WriteLine(" {0}", type[i]);
}
// catch ArgumentNullException here
catch (ArgumentNullException e)
{
Console.Write("name is null.");
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Animal {
public class Cat {
// string breed;
// string color;
// string type;
}
public class Dog {
// string breed;
// string color;
// string type;
}
public class Mouse {
// string breed;
// string color;
// string type;
}
public interface Descreption {
string getBreed();
string getColor();
string getType();
bool isAlive();
}
}
NestedType of current type is:
Animal+Cat
Animal+Dog
Animal+Mouse
Animal+Descreption
GetNestedTypes(BindingFlags)方法
此方法用于在派生类中重写时使用指定的绑定约束来搜索嵌套在当前Type中的类型。
Syntax: public abstract Type[] GetNestedTypes (System.Reflection.BindingFlags bindingAttr);
Here, it takes a bitmask comprised of one or more BindingFlags that specify how the search is conducted or, Zero, to return null.
Return Value: This method returns an array of Type objects representing all the types nested in the current Type that match the specified binding constraints (the search is not recursive), or an empty array of type Type if no nested types are found that match the binding constraints.
范例1:
// C# program to demonstrate the
// Type.GetNestedTypes() Method
using System;
using System.Globalization;
using System.Reflection;
// Defining class Empty
public class Empty { }
class GFG {
// Main Method
public static void Main()
{
// Declaring and initializing object of Type
Type objType = typeof(Animal);
// try-catch block for handling Exception
try {
// Getting array of Method by
// using GetMethods() Method
Type[] type = objType.GetNestedTypes(BindingFlags.NonPublic);
// Display the Result
Console.WriteLine("NestedType of current type is: ");
for (int i = 0; i < type.Length; i++)
Console.WriteLine(" {0}", type[i]);
}
// catch ArgumentNullException here
catch (ArgumentNullException e)
{
Console.Write("name is null.");
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Animal {
public class Cat {
// string breed;
// string color;
// string type;
}
private class Empty { }
public interface Descreption
{
string getBreed();
string getColor();
string getType();
bool isAlive();
}
}
NestedType of current type is:
Animal+Empty
范例2:
// C# program to demonstrate the
// Type.GetNestedTypes() Method
using System;
using System.Globalization;
using System.Reflection;
// Defining class Empty
public class Empty { }
class GFG {
// Main Method
public static void Main()
{
// Declaring and initializing object of Type
Type objType = typeof(Person);
// try-catch block for handling Exception
try {
// Getting array of Method by
// using GetMethods() Method
Type[] type = objType.GetNestedTypes(BindingFlags.Public);
// Display the Result
Console.WriteLine("NestedType of current type is: ");
for (int i = 0; i < type.Length; i++)
Console.WriteLine(" {0}", type[i]);
}
// catch ArgumentNullException here
catch (ArgumentNullException e)
{
Console.Write("name is null.");
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Person {
public class Student
{
// string name;
// int roll;
// string dept;
}
public class Teacher
{
// string name;
// string dept;
// int id;
}
}
NestedType of current type is:
Person+Student
Person+Teacher
参考:
- https://docs.microsoft.com/zh-cn/dotnet/api/system.type.getnestedtypes?view=netframework-4.8