2010-03-05 119 views
1

當您創建在ASP.net網頁時,代碼庫繼承System.Web.UI.Page擴展基類

現在,當我擴展頁對象檢查sessionExpired時,例如,我創建了一個新的類並從system.web.ui.page繼承,並覆蓋一些函數。

然後問題是,在每個頁面上,我必須用我的custompage類替換system.web.ui.page。

是否有方法通過直接添加方法或修改其方法來擴展類(例如,將sessionExpired檢查添加到System.Web.UI.Page)?

我使用.NET 2.0

+1

你也許可以在頁面對象中添加一個擴展方法,但是你仍然需要從某個地方調用它... – Paddy 2010-03-05 11:18:54

回答

2

您可以添加擴展方法爲System.Web.UI.Page類,將檢查會話終結你。我認爲這樣的事情會起作用。

public static bool CheckSessionExpired(this System.Web.UI.Page page) 
{ 
    ///...check session expiry here.../// 
} 

擴展方法是C#3.0功能,所以你將不得不安裝C#3.0的編譯器來編譯代碼(VS.NET 2008或更高)

由於使用的是.NET 2.0,你會必須創建屬性,因爲擴展方法依賴於僅屬於.NET 3.5(System.Core.dll)一部分的屬性。只需在項目中創建下面的屬性,你就可以使用擴展方法:

using System; 

namespace System.Runtime.CompilerServices 
{ 
    public class ExtensionAttribute : Attribute { } 
} 
1

VB 2008支持擴展方法,但是:擴展方法不能重寫基類的方法,只是添加新的方法。他們無法直接訪問擴展類型的成員。擴展不是繼承。因此,您可以通過擴展方法添加sessionExpired檢查,並在需要時調用它,但不能用它將任何觸發機制添加到System.Web.UI.Page的行爲。

+0

如果這是真的,它可能是這樣的,那麼擴展方法沒有意義 - 我可以就像在其他地方聲明一個方法並使用它,或者從基類繼承並添加一個方法一樣。幾乎沒有區別。 – 2010-03-06 11:47:40

+0

是的,擴展方法是用於其他場景,並且它們不是太強大。他們讓事情變得更加方便,但他們不會給你太多的槓桿作用。 – 2010-03-06 12:22:46