在Silverlight中抛出ReflectionTypeLoadException的继承WeakReference

fra*_*ank 5 c# silverlight weak-references

我正在尝试在我的Silverlight应用程序中使用类型安全的WeakReference.我正在关注本网站上的配方:http://ondevelopment.blogspot.com/2008/01/generic-weak-reference.html仅使用System.WeakReference并省略引用序列化的内容.

当我尝试运行它时抛出一个ReflectionTypeLoadException,并显示以下消息:

"{System.TypeLoadException:重写成员时违反了继承安全规则:'Coatue.Silverlight.Shared.Cache.WeakReference`1..ctor()'.重写方法的安全性可访问性必须与被覆盖方法的安全性可访问性相匹配. }"

有什么建议?

编辑:这是我正在使用的代码:

using System;

namespace Frank
{
    public class WeakReference<T>
        : WeakReference where T : class
    {
        public WeakReference(T target)
            : base(target) { }

        public WeakReference(T target, bool trackResurrection)
            : base(target, trackResurrection) { }

        protected WeakReference() : base() { }

        public new T Target
        {
            get
            {
                return (T)base.Target;
            }
            set
            {
                base.Target = value;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

BC.*_*BC. 5

正如托马斯所提到的,你不能从silverlight中的弱引用继承,但你可以包装它:

using System;

namespace Frank
{
    public class WeakReference<T> where T : class
    {
        private readonly WeakReference inner;

        public WeakReference(T target)
            : this(target, false)
        { }

        public WeakReference(T target, bool trackResurrection)
        {
            if(target == null) throw new ArgumentNullException("target");
            this.inner = new WeakReference(target, trackResurrection);
        }

        public T Target
        {
            get
            {
                return (T)this.inner.Target;
            }
            set
            {
                this.inner.Target = value;
            }
        }

        public bool IsAlive {
            get {
                 return this.inner.IsAlive;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)