C# 在Windows 10通用应用程序中使用CreateInstance
以下代码不在Windows 10 Universal应用程序中编译,但在.Net控制台应用程序中编译(两者都使用反射): 似乎通用windows应用程序不包含方法C# 在Windows 10通用应用程序中使用CreateInstance,c#,.net,windows-10,win-universal-app,windows-10-desktop,C#,.net,Windows 10,Win Universal App,Windows 10 Desktop,以下代码不在Windows 10 Universal应用程序中编译,但在.Net控制台应用程序中编译(两者都使用反射): 似乎通用windows应用程序不包含方法Assembly.getExecutionGassembly();程序集对象似乎也不包含CreateInstance Activator.CreateInstance在.Net中有16个重载,在Win 10应用中只有3个重载。我正在引用桌面扩展 在Windows 10中,这种类型的构造是否仍然可行?如果可行,如何实现?我试图做的是从一个
Assembly.getExecutionGassembly()
;程序集对象似乎也不包含CreateInstance
Activator.CreateInstance在.Net中有16个重载,在Win 10应用中只有3个重载。我正在引用桌面扩展
在Windows 10中,这种类型的构造是否仍然可行?如果可行,如何实现?我试图做的是从一个表示类的字符串创建一个类的实例。CoreCLR/windows10等中的反射已经将过去的
类型
中的很多内容转移到了。您可以使用获取类型的类型信息
。例如:
using System.Reflection;
...
var asm = typeof(Foo).GetTypeInfo().Assembly;
var type = asm.GetType(typeName);
var instance = Activator.CreateInstance(type);
希望所有这些都能为您所用(根据我的经验,文档可能有点混乱)。或者你可以使用:
var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);
。。。使用程序集限定类型名称,或当前执行的程序集或mscorlib中的类型名称。听起来像是要获取类型,例如使用assembly.GetType(…)
然后调用Activator.CreateInstance(type)
。哪个程序集是中的类型?类型在当前程序集中(为什么我试图调用GetExecutionGassembly),所以如果我可以得到正在执行的程序集,我当然可以这样做。你不能使用typeof(Foo)。程序集其中Foo
是你正在编写代码的类型吗?谢谢,Jon-虽然这本身不起作用,你给我指明了正确的方向。基本上,键命令是Type.GetType(),它接受字符串并返回类型。我认为这是一种安全措施,以确保您只能反映您自己的程序集。请参阅我的ansewr-我相信您仍然可以反映其他程序集,但反映有所改变。
var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);