Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相同的方法但不同的签名取决于.NET framework版本?_C#_.net_Windows Runtime_Win Universal App_Uwp - Fatal编程技术网

C# 相同的方法但不同的签名取决于.NET framework版本?

C# 相同的方法但不同的签名取决于.NET framework版本?,c#,.net,windows-runtime,win-universal-app,uwp,C#,.net,Windows Runtime,Win Universal App,Uwp,呃,为这个糟糕的标题感到抱歉,我真的不知道什么才是正确的(如果你看到更合适的,请更改) 我有一个DLL文件,用于基于WinRT的项目(或者更确切地说,我在构建universalwindows10应用程序时使用它),我还将其用于“普通”桌面应用程序。但我的问题是,我使用System.Activator.CreateInstance(typeof(T),true)来创建一些带有私有构造函数的类。这适用于桌面应用程序。但是在WinRT上,方法CreateInstance(…)不采用相同的参数。解决这个

呃,为这个糟糕的标题感到抱歉,我真的不知道什么才是正确的(如果你看到更合适的,请更改)

我有一个DLL文件,用于基于
WinRT
的项目(或者更确切地说,我在构建
universalwindows10
应用程序时使用它),我还将其用于“普通”桌面应用程序。但我的问题是,我使用
System.Activator.CreateInstance(typeof(T),true)
来创建一些带有私有构造函数的类。这适用于桌面应用程序。但是在WinRT上,方法
CreateInstance(…)
不采用相同的参数。解决这个问题的最佳方法是什么

我可以在运行时检查我是在WinRT上还是在“正常”应用程序上吗?并根据这一点使用适当的签名

(很抱歉,如果我把WinRT这个词用错了,等等,我很难理解这些通用的应用术语到底是什么)

由于沙盒安全限制,
CreateInstance(Type,bool)
重载在WinRT中不可用,这只会给您留下
CreateInstance(Type)
重载。但是,这不允许您创建具有私有构造函数的类的实例


您可能应该首先探究为什么需要使用私有构造函数创建类的副本。该类的作者不希望第三方使用它,因此创建实例是有风险的。如果类有一个受保护的构造函数,那么您可以始终从该类派生,并为新类提供一个公共构造函数。如果是私人的,那你就不走运了!一种选择可能是联系该类的作者,如果可能的话,请他们将其公开。

为什么您认为它有不同的签名?(我不是WinRT方面的专家,但这似乎不寻常。)我知道事实上它有不同的签名。因为我打开了一个WinRT项目,只有3个签名可用。而桌面的有13个。几周前,我也看到了一条评论(巧合的是),人们应该注意到,情况就是这样(但我再也找不到了)。:)我认为WinRT不支持这种重载。您可以调用
CreateInstance(Type)
,但是
CreateInstance(Type,bool)
不可用,可能是由于沙盒安全限制。是的,肖恩,我想这是我在帖子中说的。但是我能做些什么来解决这个问题呢?你是说我唯一的选择是只使用CreateInstance(类型)?@user2422321-你运气不好,因为
CreateInstance(类型)
方法需要一个公共构造函数。您可能应该首先探究为什么需要使用私有构造函数创建类的副本。感谢Sean的解释。实际上,我是具有私有构造函数的类的作者,我想阻止创建它们。它们是私有的,因为它们以通用的单例/工厂方式使用。:)