📜  c# 使用命名空间获取类型 - C# (1)

📅  最后修改于: 2023-12-03 15:29:46.767000             🧑  作者: Mango

C# 使用命名空间获取类型

在 C# 中,获取类型可以通过 Type 类或者 Type 关键字来实现,而命名空间可以帮助我们组织代码和类型,使代码更加清晰和易读。本文将介绍如何使用命名空间来获取类型。

获取命名空间下的所有类型
using System;

namespace MyNamespace
{
    class MyClass1 {}
    class MyClass2 {}
}

class Program
{
    static void Main(string[] args)
    {
        var myNamespaceTypes = typeof(MyNamespace).GetNestedTypes();

        foreach (var type in myNamespaceTypes)
        {
            Console.WriteLine(type.Name);
        }
    }
}

上述代码中,我们先定义了一个命名空间 MyNamespace,并在该命名空间下定义了两个类型 MyClass1MyClass2。然后通过 typeof(MyNamespace) 方法获取到 MyNamespaceType 对象,再通过 GetNestedTypes() 方法获取到 MyNamespace 中的所有嵌套类型。

最后通过 foreach 循环遍历 myNamespaceTypes 数组,将每个类型的 Name 属性输出到控制台上。

获取指定命名空间下的所有类型
using System;
using System.Linq;
using System.Reflection;

namespace MyNamespace
{
    class MyClass1 {}
    class MyClass2 {}
}

class Program
{
    static void Main(string[] args)
    {
        var myNamespaceTypes = Assembly.GetExecutingAssembly()
                                       .GetTypes()
                                       .Where(t => t.Namespace == "MyNamespace");

        foreach (var type in myNamespaceTypes)
        {
            Console.WriteLine(type.Name);
        }
    }
}

如果需要获取指定命名空间下的所有类型,可以通过 Assembly 类来实现。首先通过 GetExecutingAssembly() 方法获取当前程序集的 Assembly 对象,然后通过 GetTypes() 方法获取当前程序集中的所有类型。

接着通过 Where() 方法筛选出指定命名空间下的所有类型,在 foreach 循环中输出每个类型的 Name 属性。

根据名称获取指定命名空间下的类型
using System;
using System.Reflection;

namespace MyNamespace
{
    class MyClass1 {}
    class MyClass2 {}
}

class Program
{
    static void Main(string[] args)
    {
        var myNamespaceType = Type.GetType("MyNamespace.MyClass1");

        Console.WriteLine(myNamespaceType.Name);
    }
}

如果需要根据名称获取指定命名空间下的某个类型,可以使用 Type.GetType() 方法。该方法的参数为类型的全名,包括命名空间和类型名。

上述代码中,我们通过 Type.GetType() 方法获取了 MyNamespace 命名空间下的 MyClass1 类型,并将其 Name 属性输出到控制台上。

总结

通过使用命名空间,我们可以帮助组织代码和类型,使代码更加清晰和易读。同时,使用上述方法可以很方便地获取命名空间中的所有类型,以及根据名称获取指定类型。