2013-03-04 88 views
5

我正在阅读.NET4源代码(可以免费下载它们用于研究),并且在执行System.Web.Security.FormsAuthenticationModule时发现了一些奇怪的东西。FormsAuthenticationModule中的这段代码应该如何工作?

类声明如下:

public sealed class FormsAuthenticationModule : IHttpModule 

其中IHttpModule有两个方法 - Init()Dispose()

OnEnter()那里是这些行:

// Step 2: Call OnAuthenticate virtual method to create 
// an IPrincipal for this request 
OnAuthenticate(new FormsAuthenticationEventArgs(context)); 

其中OnAuthenticate()声明如下:

// OnAuthenticate: Forms Authentication modules can override 
//    this method to create a Forms IPrincipal object from 
//    a WindowsIdentity 
private void OnAuthenticate(FormsAuthenticationEventArgs e) { 

现在的类是sealed,所以这是不可能的继承。 OnAuthenticate()也不是virtual所以我不知道它怎么可能被覆盖。

因此,它看起来像这些评论只是过时的,重写OnAuthenticate()已不再可能。

我有什么不对吗?这个代码可能允许覆盖OnAuthenticate()吗?

+0

AFAIU这个类是非常[开始](http://msdn.microsoft.com/en- us/library/system.web.security.formsauthenticationmodule(v = vs.71).aspx) – 2013-03-04 12:06:04

+1

从名称和参数可以看出,这是['event trigger'](http://stackoverflow.com/a/ 2448530/60761),他们通常应该是虚拟的。这当然与密封冲突。最差的情况是一个班级可以订阅自己的活动。 – 2013-03-04 12:16:23

回答

1

它不起作用。这只是不正确的文件。不是MS的第一个。例如,我在.NET Framework的1.1版中向MS通报了这一情况,现在我们的版本为4.5,并且文档仍然完全具有误导性:http://msdn.microsoft.com/en-us/library/7he0a7s1.aspx

请注意“继承者注释”部分。当包含多个internal abstract属性和方法时,有人应该如何从BindingManagerBase派生类?然而在BindingManagerBase和CurrencyManager的文档中有几个地方有“继承者的注释”...