下面的代码不起作用,我想知道如何动态地将实例转换为运行时确定的类型?
Convert.ChangeType() 返回一个仍需要转换的对象。所有 Invoke() GetConstructor() 或 Activator.CreateInstance() 的尝试也是如此,请参见下文。在某些时候,我需要显式地输入代码,我希望避免它或尽可能将其推出。
Type type = Type.GetType ("RandomChildClass");
Object obj = Activator.CreateInstance (type, new Object[]{ "argument" });
var instance = (type)obj;
我知道我可以创建一个方法来接受 ,但我仍然有同样的问题,不知道如何使用动态随机类型调用它使用类型变量转换变量
不可能使用Type
value以确定表达式的类型。 (泛型类型参数与值不同,因为它们被编码到类型系统中。)
变量的值来自run-time代码执行,而表达式类型是编译时构造。不用说,编译发生在代码运行之前,因此使用变量进行强制转换是不可能的。
反射(尽管不方便)或dynamic(这基本上是更容易使用的反射)允许调用任意方法或针对通用对象类型表达式访问属性/字段 - 这有时被称为“后期绑定”。但是,那表达式的类型调用的操作仍然是对象。
接口可用于统一不同的类实现以实现正确的静态类型。然后,新创建的对象可以转换为所需的适用接口。就像其他表达式一样,类型是编译时构造(因此必须直接指定接口),但代码现在不受特定类的影响。
如果创建一个系统,使这些“动态类”直接在静态类型(C#)代码中使用,并且可以保证接口或将其限制在一个小集合中,那么使用接口可能是最干净的方法:例如var myAction = (IMyAction)obj
。否则,请退回到动态访问 - 直接访问或在幕墙后面访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)