📜  C#| Type.GetNestedTypes()方法

📅  最后修改于: 2021-05-29 14:34:01             🧑  作者: Mango

Type.GetNestedTypes()方法用于获取嵌套在当前Type中的类型。此方法的重载列表中有2种方法,如下所示:

  • GetNestedTypes()方法
  • GetNestedTypes(BindingFlags)方法

GetNestedTypes()方法

此方法用于返回嵌套在当前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中的类型。

范例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