【发布时间】:2015-11-04 02:35:07
【问题描述】:
以下代码不能在 Windows 10 通用应用程序中编译,但可以在 .Net 控制台应用程序中编译(均使用反射):
string objType = "MyObjType";
var a = Assembly.GetExecutingAssembly();
var newObj = a.CreateInstance(objType);
似乎通用 Windows 应用程序不包含方法 Assembly.GetExecutingAssembly(); Assembly 对象似乎也不包含CreateInstance。
Activator.CreateInstance 在 .Net 中有 16 个重载,而在 Win 10 应用程序中只有 3 个。我指的是桌面扩展。
这种类型的构造在 Windows 10 中是否仍然可行?如果可以,如何实现?我要做的是从代表该类的字符串创建一个类的实例。
【问题讨论】:
-
听起来你想获取类型,例如与
Assembly.GetType(...),然后调用Activator.CreateInstance(Type)。类型在哪个程序集中? -
类型在当前程序集中(为什么我试图调用 GetExecutingAssembly),所以如果我能得到正在执行的程序集,我当然可以这样做。
-
那么你不能使用
typeof(Foo).AssemblyFoo是你编写代码的类型吗? -
谢谢,乔恩 - 虽然这本身不起作用,但您为我指明了正确的方向。基本上,关键命令是 Type.GetType() ,它接受一个字符串并返回一个类型。我认为这是一种安全措施,以确保您只能反映自己的程序集。
-
查看我的答案 - 我相信您仍然可以对其他程序集进行反思,但反思已经发生了一些变化。
标签: c# .net windows-10 win-universal-app windows-10-desktop