相同的方法但不同的签名取决于 .NET 框架版本?
Same method but different signature depending on .NET framework version?
抱歉标题不好,真的不知道什么才是正确的(如果您看到更合适的内容,请更改)。
我有一个 DLL 文件,用于基于 WinRT
的项目(或者更确切地说,我在构建 Universal Windows 10
应用程序时使用它),我也将它用于 "normal" 桌面应用程序。但我的问题是我使用 System.Activator.CreateInstance<T>(typeof(T), true)
来创建一些带有私有构造函数的 类 。这适用于桌面应用程序。但在 WinRT 上,方法 CreateInstance<T>(...)
不采用相同的参数。解决此问题的最佳方法是什么?
我能否在运行时检查我是在 WinRT 上还是在 "normal" 应用程序上?并基于此使用适当的签名?
(抱歉,如果我用错了 WinRT 等词,我很难理解所有这些通用应用程序术语的含义)
由于沙盒安全限制,CreateInstance(Type, bool)
重载在 WinRT 中不可用,这只会给您留下 CreateInstance(Type)
重载。但是,这不允许您创建具有私有构造函数的 class 的实例。
您可能应该首先探索为什么需要使用私有构造函数创建 class 的副本。 class 的作者并没有打算让第三方使用它,所以创建一个实例是有风险的。如果 class 有一个受保护的构造函数,那么你总是可以从 class 派生并给你的新 class 一个 public 构造函数。如果它是私人的,那么你就不走运了!一种选择可能是联系 class 的作者,并请他们尽可能 public。
抱歉标题不好,真的不知道什么才是正确的(如果您看到更合适的内容,请更改)。
我有一个 DLL 文件,用于基于 WinRT
的项目(或者更确切地说,我在构建 Universal Windows 10
应用程序时使用它),我也将它用于 "normal" 桌面应用程序。但我的问题是我使用 System.Activator.CreateInstance<T>(typeof(T), true)
来创建一些带有私有构造函数的 类 。这适用于桌面应用程序。但在 WinRT 上,方法 CreateInstance<T>(...)
不采用相同的参数。解决此问题的最佳方法是什么?
我能否在运行时检查我是在 WinRT 上还是在 "normal" 应用程序上?并基于此使用适当的签名?
(抱歉,如果我用错了 WinRT 等词,我很难理解所有这些通用应用程序术语的含义)
由于沙盒安全限制,CreateInstance(Type, bool)
重载在 WinRT 中不可用,这只会给您留下 CreateInstance(Type)
重载。但是,这不允许您创建具有私有构造函数的 class 的实例。
您可能应该首先探索为什么需要使用私有构造函数创建 class 的副本。 class 的作者并没有打算让第三方使用它,所以创建一个实例是有风险的。如果 class 有一个受保护的构造函数,那么你总是可以从 class 派生并给你的新 class 一个 public 构造函数。如果它是私人的,那么你就不走运了!一种选择可能是联系 class 的作者,并请他们尽可能 public。