在Silverlight中子类化透明类型并使用安全关键构造函数的安全规则

3
在Silverlight(v4.0)安全模型中,从类型派生的Shawn Farkas说
引用如下:

[...]我们看到应用程序类型只能从其他应用程序类型或透明平台类型派生。 (*)

其中*表示:
引用如下:

(*)这在99.9%的情况下是正确的。还有一条关于类的默认构造函数可见性的规则(我们将在下周深入探讨安全模型时介绍),这也要求基类的默认构造函数(如果有的话)必须是透明的。实际上,您通常不会在平台上找到有趣的透明类型,这些类型没有透明的默认构造函数,因此,这个规则通常不起作用。

然而,有一个这样的有趣的透明类型没有透明的默认构造函数-WebClient类。还有一个很好的理由想要对其进行子类化-覆盖GetWebRequest以提供对cookie的支持。
作为测试,我已经尝试了以下内容,既可以使用构造函数属性,也可以不使用...
public class MyWebClient : WebClient
{
    [SecuritySafeCritical] // matches the attribute on the base class ctor
    public MyWebClient() { }
}

无论哪种方式,都会出现以下错误:
继承安全规则在覆盖成员“MyWebClient..ctor()”时被违反。覆盖方法的安全可访问性必须与被覆盖方法的安全可访问性相匹配。
在我看来,这似乎是他提到的0.1%情况。不幸的是,据我所知,接下来的帖子从未详细说明这里的规则将是什么。因此,我有两个问题:
1. 有人知道这个0.1%的规则是什么吗? 2. 鉴于问题1,是否可以在Silverlight 4中从WebClient派生?

这真是令人沮丧。文档中完全没有提到这一点。只有在实际尝试或通过反射查看时才能发现。 - AnthonyWJones
1个回答

0

我的回答涵盖了你问题的第一部分。

对于第二个问题,答案很简单,就是不行。但是在WebClient的情况下,如果你有某些原因需要这样做,你可以自己创建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接