c# - 相同的方法但不同的签名取决于 .NET 框架版本?

标签 c# .net windows-runtime win-universal-app uwp

抱歉,标题不好,真的不知道什么是正确的(如果您看到更合适的内容,请更改)。

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

我能否在运行时检查我是在 WinRT 上还是“正常”应用程序?并基于此使用适当的签名?

(抱歉,如果我用错了 WinRT 这个词等等,我很难理解所有这些到处乱飞的通用应用程序术语是什么)

最佳答案

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

您可能首先应该探索为什么需要创建具有私有(private)构造函数的类的副本。该类的作者并不打算让第三方使用它,因此创建实例是有风险的。如果该类有一个 protected 构造函数,那么您始终可以从该类派生并为您的新类提供一个公共(public)构造函数。如果它是私有(private)的,那么你就不走运了!一种选择可能是联系类(class)的作者,并要求他们将其公开(如果可能)。

关于c# - 相同的方法但不同的签名取决于 .NET 框架版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32716400/

相关文章:

c# - 如何在 Linux 中确定 Mono/C# 中的空闲内存(没有外部 DLL)

c# - 我可以通过不同的 "API"DLL 只公开一个 .NET DLL 的公共(public)类的一部分吗?

windows-8 - Metro/WinRT UI 异步无效事件处理程序未调用未处理的异常处理程序

c# - 捕获异步 lambda 异常

c# - 运算符 '?' 不能应用于类型 'T' 的操作数 (2)

c# - 如何防止在 ASP.Net Web Forms (Identity) 中注册后自动登录?

c# - 使用 Google .NET API 复制 Google Docs 电子表格

xaml - 有没有办法在 Metro 风格的应用程序中为 Margin 属性设置动画

c# - 不使用 Autofac 命名空间的隐式解析范围

c# - 使用 ReactiveUI、Observables、SubscribeOn 和 ObserveOn 在长时间运行的过程中在 UI 中显示输出日志