2015-09-22 43 views
2

对于坏头衔抱歉,真的不知道什么是正确的(如果你看到更合适的东西,请更改)。取决于.NET框架版本的相同方法但签名不同?

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

我可以在运行时检查我是否在WinRT上,或者它是否为“正常”应用程序?并根据使用适当的签名?

(很抱歉,如果我使用WinRT的错误等,我不得不抓硬什么就是什么与所有这些通用的应用程序而言飞来飞去的单词)

+0

你为什么认为它有不同的签名? (我不是WinRT的专家,但这似乎不寻常。) –

+0

我知道它有不同的签名。因为我打开了一个WinRT项目,并且只有3个签名可用。桌面应用程序有13个。我几周前还看到了一个评论(巧合),应该注意的是,情况就是如此(尽管如此,仍然无法找到它)。 :) – Whyser

+0

我认为这种超载在WinRT中不受支持。您可以调用'CreateInstance(Type)',但是'CreateInstance(Type,bool)'不可用,可能是由于沙盒安全限制。 – Sean

回答

0

CreateInstance(Type, bool)超载不在可用WinRT由于沙盒安全限制,这只会让你承受过载。但是,这不会允许您创建具有私有构造函数的类的实例。

您应该探索为什么您需要首先使用私有构造函数创建类的副本。该课程的作者不打算将其用于第三方,因此创建实例具有风险。如果这个类有一个受保护的构造函数,那么你总是可以从这个类派生出来,并为你的新类提供一个公共构造函数。如果它是私人的,那么你是不幸的!如果可能的话,一种选择可能是联系课堂作者并要求他们公开。

+0

谢谢你的解释肖恩。我实际上是带有私有构造函数的类的作者,并且想阻止它们的创建。它们是私有的,因为它们以通用的Singleton/Factory方式使用。 :) – Whyser

相关问题