發表文章

目前顯示的是 2019的文章

取當前方法或函式的名稱

此篇文章引用自 Get Caller Name [.NET]CallerMemberNameAttribute-可讓您取得方法呼叫端的方法或屬性名稱 C#]CallerMemberName取得呼叫端函式名稱 MSDN - Caller Information (C# and Visual Basic) Get Current Name How to get the name of the current method from code 如何取得被呼叫函式的函式名稱 引言 C#不像C++中有一些預先定義的巨集(Predefined Marcors)可以使用 例如常用在輸出Trace Log的:  __FUNCTION__ - 目前原始程式檔名稱  __LINE__ - 目前原始程式檔中行號 在C#當中就沒有提供 (註: .NET中有提供 MethodBase.GetCurrentMethod可以Runtime取得函式名) 解法一: System.Runtime.CompilerServices 從.NET 4.5起在 System.Runtime.CompilerServices  有提供一些類似的功能 CallerFilePathAttribute - 取得呼叫端的程式檔名稱 CallerMemberNameAttribute - 取得呼叫端的函式名稱 CallerLineNumberAttribute - 取得呼叫端的程式檔中的行號 只要在Method中設定 CallerMemberNameAttribute (要using System.Runtime.CompilerServices;),就可以在Method中取得呼叫端資訊,如下為MSDN的範例, //using System.Runtime.CompilerServices; namespace ConsoleApplication1 { class Program { static void Main ( string [] args) { TraceMessage( "Hi, Rainmaker!" ); }

Session.RemoveAll() 及Session.Abandon() 的差別

Session.RemoveAll() 會清除目前工作階段中的所有 Session 記錄 而不僅僅只清除 Session 中的內容 這點可於執行 RemoveAll() 方法後 使用 Response.Write(Session.Count) ,觀其結果為 0 得到驗證 而 Abandon() 方法不同於 RemoveAll() 之處 在於 Abandon() 除了跟 RemoveAll() 一樣會清除所有 Session 之外 亦會結束目前的工作階段 (RemoveAll() 則仍處於同一個工作階段 ) 若工作階段模式 (Session.Mode) 設定為 InProc 的話 則 Abandon() 會觸發 Session_End 事件,而 RemoveAll() 則不會 不過常由於網頁仍在執行的緣故,故立即又觸發了 Session_Start() 事件 使得兩者表面上看起來並沒有太大的不同 但其實執行 Abandon() 後已變成另一個工作階段了 這點可以使用 IsNewSession() 方法來加以驗證 得到的結果 RemoveAll() 將是 False, 而 Abandon() 則為 True 總歸來說,兩者最大的不同 就在於觸發 Session_End 事件與否了 另外還有 Session.Clear() 方法 其功能則與 RemoveAll() 相同,就不再墜述了 其他參考: https://dotblogs.com.tw/jimmyyu/2009/08/07/9930