我们有一个类 WeakRef,它继承自 WeakReference。此类最初是针对标准 .NET 框架的命名空间的一部分。最近,我们迁移到 .NET 4.5 并决定使用可移植类库。我们包含了 WeakRef,但在 Silverlight 应用程序中引用它会导致以下运行时异常:
$exception {System.TypeInitializationException: 'AxisModel.ImageDownloadAlert' 的类型初始化程序引发了异常。---> System.TypeLoadException:类型违反了继承安全规则:'Common.WeakRef`1'。派生类型必须要么与基类型的安全可访问性相匹配,要么难以访问。如果基类具有不透明的默认构造函数,则派生类也必须具有默认构造函数,并且方法继承规则适用于这两个方法。
在 Common.WeakRefCallbackHostCore`1..ctor(Object syncRoot)
在 AxisModel.ImageDownloadAlert..ctor()
在 AxisModel.ImageDownloadAlert..cctor()--- 内部异常堆栈跟踪结束 ---
在 SLWebApp.App..ctor()
的 AxisModel.ImageDownloadAlert.get_Instance()}System.Exception {System.TypeInitializationException}
我注意到 Silverlight 版本的 WeakReference 有一个空的默认构造函数,而标准 .NET 版本的 WeakReference 则不是这种情况。我认为这是引发异常的原因,因为 WeakRef 不包含空构造函数。问题是向此类添加空构造函数会导致我们的 WPF 应用程序出现编译错误。
有没有办法在我们的 Silverlight 和 WPF 应用程序之间共享 WeakRef 而不会导致运行时和编译错误?我正在寻找微创解决方案。
更新:
已经有一些关于在 Silverlight 中继承 WeakReference 的讨论。显然,这是不可能的,因此必须创建一个包含 WeakReference 实例的类。但是,无论是否涉及 WeakReference,是否可以从类似于 WeakReference 的类继承,因为它的 Silverlight 定义有一个空的默认构造函数,而它的 .NET Framework 定义没有?
讨论可以在这里找到:
继承的 WeakReference 在 Silverlight 中抛出 ReflectionTypeLoadException