2013-02-25 56 views
0

當我開始在asp工作時,發現它幾乎不可能離開php的舊版本echo()函數 - 我的手按字面意思地鍵入它而不是response.write()向.net網絡應用程序添加一個類感知全局函數

所以,在.NET頁我往往把這樣的事情:

Public Sub echo(ByVal strValue As String) 
    Response.Write(strValue) 
End Sub 

而在.NET類(即App_Code文件夾中的類),我往往把這樣的事情:

Public Sub echo(ByVal strValue As String) 
    HttpContext.Current.Response.Write(strValue) 
End Sub 

雖然這工作正常 - 我想有這個坐在應用程序級別,因此它可以在任何地方使用(即在類,aspx代碼隱藏頁等)。

Tricky位來app_code內的類,即他們需要使用HttpContext.Current.來訪問Response.Write方法。

我知道你可以有它作爲一個公共類內的共享子有一個「全球通」的功能,但是這仍然需要一個雙桶使用(我想?)即tools.echo()

我的問題:是否有可能有一個全局函數,不需要包含一個類,如果是的話,如何使它具有類感知能力,即,如果它在app_code類中使用,那麼它需要使用HttpContext.Current.Response.Write與代碼隱藏可以直接訪問Response的頁面。

我的壞習慣不談,echo()實際上看起來更整潔的代碼比Response.Write() &也有一些其他的方法,我想使全球以這種方式 - 因此,我的問題:)

回答

0

在C#中,無法創建頂級功能。 C#編譯器的開發人員Eric Lippert解釋了爲什麼在this blog post中。

C#被設計成一個大型的應用程序開發語言 從第一天開始就面向專業開發人員;它從來沒有打算成爲一種腳本語言。因此,它的設計鼓勵即使將很小的代碼組織立即組織到組件中。 C#是一種面向組件的語言。因此,我們希望鼓勵 以基於組件的風格進行編程,並且阻止 針對該風格的功能。

至於你的技術問題,你必須在「你可以」和「你應該」之間作出決定。

你能否:我立即想到的可能是使用靜態實用類或單身人士,如果您有真正全球性的,功利的方法。另一種可以做到的「技術」方式是創建類型爲object的擴展方法。 當心,後者惡作劇。

你應該:我的建議是用C#方式做C#事情。

+0

好評。我贊同「腳本語言」(反目標)。 – granadaCoder 2013-02-25 16:24:09

+0

我以爲這麼多,只是不得不養成這樣的習慣 - 歡呼。 – HeavenCore 2013-02-25 16:28:31

0

創建您的「幫手」功能來接受上下文作爲參數。

public partial class MyPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
     } 
    } 

    private void LogoutUser() 
    { 
     Helpers.SessionHelpers.LogoutUser(this.Context); 
    } 
} 

internal static class SessionVariableKeys 
{ 
    internal static readonly string USER_ID = "UserId"; 
} 

internal static class SessionHelpers 
{ 
    internal static void LogoutUser(System.Web.HttpContext context) 
    { 
     context.Session[SessionVariableKeys.USER_ID] = null; 
        /* or */ 
     context.Session.Remove(SessionVariableKeys.USER_ID); 
        /* or */ 
     context.Session.RemoveAll(); 
     /* and */ 
     /* icing on the cake */ 
     context.Session.Abandon(); 

     /*context.Response.Redirect("SomePage.aspx"); */ 
    } 

} 
+0

請注意,我謹慎使用。但上面是一個「註銷」例程,可以從應用程序中的幾個地方調用。 – granadaCoder 2013-02-25 15:58:57

相關問題