c# – 如何在运行时中实例化这个’带有泛型参数的类’
发布时间:2020-12-16 00:08:33 所属栏目:百科 来源:网络整理
导读:参见英文答案 Create instance of generic type?????????????????????????????????????10个 考虑以下代码行: classAclassB C; 我想通过使用System.Reflection在运行时创建C的实例.为此,我需要在运行时知道classA和classB的类型. 我知道如何获得classB的类型
参见英文答案 >
Create instance of generic type?????????????????????????????????????10个
考虑以下代码行: classA<classB> C; 我想通过使用System.Reflection在运行时创建C的实例.为此,我需要在运行时知道classA和classB的类型. 我知道如何获得classB的类型 Type classBType = AssemblyContaingClassB.GetType("namespace.classB"); Q1>如何使用此classBType获取classA的类型? Q2>我知道要在运行时创建实例,我们调用以下代码行: object C = Activator.CreateInstance(TypeName); 要创建C的实例,代码上面应使用什么TypeName?将足以创建此实例的classA类型 如果这个问题太基础,请提前致谢并道歉.我是c#的新手. 编辑: 问题是固定的.从p.s.w.g的答案来看,使用泛型参数获取类的类型存在问题.关于如何获得通用参数类型的解决方案可以在here找到.之后我就完成了p.s.w.g的答案建议及其工作. 解决方法
鉴于您的最新更新,似乎问题是加载类型classA<>在运行时.为了避免命名冲突,C#编译器生成一个名称,如SimpleClassName`N,其中N是泛型类型参数的数量,因此要获得classA<>通过反射键入,使用名称namespace.classA`1.之后,您只需使用
MakeGenericType 方法:
var classAType = AssemblyContaingClassA.GetType("namespace.classA`1"); var classBType = AssemblyContaingClassB.GetType("namespace.classB"); var genericType = classAType.MakeGenericType(classBType); object instance = Activator.CreateInstance(genericType); 当然,除非您必须在运行时加载类型,否则使用 var classAType = typeof(classA<>); var classBType = typeof(classB); var genericType = classAType.MakeGenericType(classBType); object instance = Activator.CreateInstance(genericType); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |