В модели безопасности Silverlight (v4.0) Шон Фаркас говорит о производных от типов:
[...] мы видим, что
типы приложений могут быть получены только из
другие типы приложений или прозрачные
типы платформ. (*)
* Часть этого:
(*) Это верно в 99,9% случаев. Есть еще одно правило о видимости конструктора класса по умолчанию (которое мы рассмотрим на следующей неделе, когда углубимся в модель безопасности), которое также требует, чтобы конструктор по умолчанию базового класса (если он есть) должно быть прозрачным. Практически говоря, вы обычно не найдете интересных прозрачных типов в платформе, которые также не имеют прозрачных конструкторов по умолчанию, поэтому это правило обычно не вступает в игру.
Однако существует один такой интересный прозрачный тип, у которого нет прозрачного конструктора по умолчанию - класс WebClient. Есть также веская причина хотеть подклассировать его - переопределить GetWebRequest для обеспечения поддержки файлов cookie.
В качестве теста я попробовал следующее с атрибутом конструктора и без него ...
public class MyWebClient : WebClient
{
[SecuritySafeCritical] // matches the attribute on the base class ctor
public MyWebClient() { }
}
... но в любом случае получите следующую ошибку:
Нарушение правил безопасности наследования при переопределении члена: 'MyWebClient..ctor ()'. Доступность для безопасности метода переопределения должна соответствовать доступности безопасности переопределяемого метода.
Мне кажется, это случай в 0,1%, о котором он упоминает. К сожалению, насколько я могу судить, в следующих постах никогда не раскрывалось, какое правило будет здесь. Таким образом, у меня есть два вопроса:
- Кто-нибудь знает, что это за правило в 0,1%?
- Учитывая 1, возможно ли извлечь из WebClient в Silverlight 4?