【发布时间】:2011-10-01 10:17:15
【问题描述】:
在 Silverlight (v4.0) 安全模型中,Shawn Farkas says 派生自类型:
[...] 我们看到了 应用程序类型只能派生自 其他应用类型或透明 平台类型。 (*)
这里的*部分是:
(*) 这在 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,是否可以从 Silverlight 4 中的 WebClient 派生?
【问题讨论】:
-
这很令人沮丧。该文档没有显示任何线索。您只有在实际尝试或通过反射器查看时才会发现。
标签: silverlight security webclient