我正在阅读.net4源代码(它们可以免费下载进行研究),我在System.Web.Security.FormsAuthenticationModule
的实现中发现了一些奇怪的东西。
类声明如下:
public sealed class FormsAuthenticationModule : IHttpModule
其中
IHttpModule
有两种方法-Init()
和Dispose()
。里面有几行:
// Step 2: Call OnAuthenticate virtual method to create
// an IPrincipal for this request
OnAuthenticate( new FormsAuthenticationEventArgs(context) );
其中
OnEnter()
声明如下:// OnAuthenticate: Forms Authentication modules can override
// this method to create a Forms IPrincipal object from
// a WindowsIdentity
private void OnAuthenticate(FormsAuthenticationEventArgs e) {
现在类是
OnAuthenticate()
,所以不可能从继承。而且sealed
不是OnAuthenticate()
所以我不知道它是如何被重写的。所以看起来这些评论已经过时了,不再可能覆盖
virtual
。我做错什么了吗?此代码是否可能允许重写
OnAuthenticate()
? 最佳答案
它不起作用。这只是不正确的文件。对ms来说,这不是第一次。例如,我在.net framework的1.1版中通知了ms,现在是4.5版,文档仍然完全误导了她:http://msdn.microsoft.com/en-us/library/7he0a7s1.aspx
请注意“继承人注意事项”部分。当bindingmanagerbase包含多个internal abstract
属性和方法时,如何从它派生类?然而,在bindingmanagerbase和currencymanager的文档中有几个地方有“继承者注释”…