利用反射动态创建 C# 泛型对象
在 C# 开发中,经常需要动态创建泛型类的实例。这可以通过反射来实现。一个常见的应用场景是:泛型类的类型在运行前未知,需要根据表示其完全限定名的字符串来创建。
使用反射动态创建泛型类,需要用到 Activator.CreateInstance
方法:
<code class="language-csharp">using System; using System.Reflection; public class MainClass { public static void Main(string[] args) { // 获取泛型类型定义 Type genericType = typeof(Task<>); // 构建泛型类型的类型参数 Type[] typeArgs = { typeof(Item) }; // 创建具体的泛型类型 Type specificType = genericType.MakeGenericType(typeArgs); // 创建具体类型的实例 object instance = Activator.CreateInstance(specificType); } } public class Item { } public class Task<T> { } public class TaskA<T> : Task<T> { } public class TaskB<T> : Task<T> { }</code>
以上示例代码动态构建了 Task<Item>
的实例。如果目标类型在运行时未知,可以通过传递类型的完全限定名(字符串)来动态构建:
<code class="language-csharp">// 使用字符串表示获取类型 Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数 // 传递类型参数并创建实例 Type[] typeArgs = { typeof(Item) }; object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));</code>
这种方法允许开发者在编译时不知道具体类型的情况下,动态创建泛型类的实例。这在从配置文件推断类型或数据驱动编程等场景中特别有用。
以上是如何使用反射动态创建通用 C# 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!