Наследованный бросок WeakReference ReflectionTypeLoadException в Silverlight

Я пытаюсь использовать безопасный с точки зрения типов WeakReference в своем приложении Silverlight. Я следую рецепту на этом сайте: http://ondevelopment.blogspot.com/2008/01/generic-weak-reference.html только с помощью Системы. WeakReference и исключение материала та ссылочная Сериализация.

Это бросает ReflectionTypeLoadException, когда я пытаюсь выполнить его с этим сообщением:

"{Система. TypeLoadException: правила безопасности Наследования, нарушенные, в то время как переопределяющий участник: 'Coatue. Silverlight. Общий. Кэш. WeakReference '1.. ctor ()'. Доступность безопасности метода переопределения должна соответствовать доступности безопасности переопределяемого метода.}"

Какие-либо предложения?

Править: Вот код, который я использую:

using System;

namespace Frank
{
    public class WeakReference
        : 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;
            }
        }
    }
}

5
задан frank 12 July 2010 в 21:29
поделиться

2 ответа

Как упоминал Томас, вы не можете наследовать от слабой ссылки в 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;
            }
        }
    }
}
5
ответ дан 14 December 2019 в 04:29
поделиться

Существует требование наследования для класса WeakReference, а среда выполнения Silverlight не имеет необходимых разрешений. Поэтому вы не можете наследовать WeakReference в Silverlight...

[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
3
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: