📜  c# 如何从字符串中加载类的类型 - C# (1)

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

C# 如何从字符串中加载类的类型

在C#中,我们通常需要使用反射来动态加载类的类型。从字符串中加载类的类型,是反射中一个非常常用且重要的功能。无论是在框架开发、插件开发、还是其他需要动态加载类的场景,我们都需要掌握这个技巧。

通过 Type.GetType() 加载类的类型

C#中提供了一个名为 Type.GetType() 的方法,可以通过传入类的完整限定名来加载类的类型。类的完整限定名包括命名空间、类名和程序集名称。

以下是一个示例,通过一个字符串加载 Person 类的类型:

string typeName = "YourNamespace.Person, YourAssemblyName";
Type type = Type.GetType(typeName);

其中,YourNamespacePerson 类所在的命名空间,YourAssemblyNamePerson 类所在的程序集名称。如果 Person 类在当前程序集中,可以省略程序集名称:

string typeName = "YourNamespace.Person";
Type type = Type.GetType(typeName);

这种方式在加载 .NET Framework 常见类型时非常实用,比如:

Type type = Type.GetType("System.String");
通过 Assembly.GetType() 加载类的类型

在多数情况下,类的类型都包含在一个程序集中。在这种情况下,我们也可以使用 Assembly.GetType() 方法来加载类的类型。该方法需要传入类的完整限定名,和包含该类的程序集对象。

以下是一个示例,通过程序集对象和字符串加载 Person 类的类型:

Assembly assembly = Assembly.Load("YourAssemblyName");
string typeName = "YourNamespace.Person";
Type type = assembly.GetType(typeName);

在实际应用中,如果类的完整限定名或程序集名称没有写错,并且程序集确实包含该类,上述两种方式都可以加载到类的类型。但是,我们通常需要根据实际情况选择使用哪种方式。

另外,值得一提的是,如果是需要通过接口等类型来动态加载类的类型,可以使用 Assembly.GetTypes() 方法获取程序集中所有的类型,再通过遍历的方式寻找符合条件的类型。

结论

通过上述两种方式,我们可以方便地从字符串中加载类的类型,从而实现动态创建对象、调用方法等操作。需要注意的是,动态加载类型是反射中的一个高级功能,使用不当可能会导致程序出现各种问题,例如安全性问题、性能问题等。因此,在使用时需要特别谨慎,避免出现不必要的麻烦。