2013-03-04 61 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的文檔中有幾個地方有「繼承者的註釋」...