我創建了一個非常簡單的幫助類,我可以在我的ASP.Net頁面中使用。這個想法是,它應該是一個非常簡單的方法來記錄頁面錯誤或成功(而不是表單驗證錯誤),然後將其顯示給用戶。靜態類留在內存.....如何最好地實現這
以我公共助手類我有具有某些屬性的類,如下所示:
public class UserMessage
{
public UserMessage()
{
Messages = new Dictionary<string, string>();
}
public string SummaryMessage;
public Dictionary<string, string> Messages;
public bool ShowMessages;
public bool ShowAsError;
}
我然後具有被用於存儲UserMessage類的一個實例,像這樣的變量:
private static UserMessage _userMessage {get;組; }
我然後有兩個公共靜態方法,一個用於記錄一個消息,該其他顯示所有的消息,例如:
public static void LogSummary(string summaryMessage, bool showIndividualMessages, bool showAsError)
{
_userMessage = new UserMessage();
_userMessage.SummaryMessage = summaryMessage;
_userMessage.ShowMessages = showIndividualMessages;
_userMessage.ShowAsError = showAsError;
}
public static string DisplayUserMessages()
{
if (_userMessage == null)
return string.Empty;
StringBuilder messageString = new StringBuilder();
messageString.AppendFormat("\n");
messageString.AppendLine(string.Format("<div class=\"messageSummary {0}\">", (_userMessage.ShowAsError) ? "invalid" : "valid"));
messageString.AppendLine(string.Format("<h3>{0}</h3>", _userMessage.SummaryMessage));
messageString.AppendLine("</div>");
return messageString.ToString();
}
我的問題是,_userMessage變量必須是一個靜態變量,否則我會收到錯誤消息「非靜態字段需要對象引用.......」。變量是靜態的問題在於它保留在內存中,所以如果用戶收到錯誤消息,然後訪問另一個頁面 - 錯誤消息仍然顯示!
我敢肯定,這是因爲我錯過了OOP 101,但我應該怎麼糾正呢?提前
感謝 鋁
您無法從靜態方法訪問非靜態變量,這就是爲什麼它在您將_userMessage字段設置爲靜態後會起作用。 – 2012-04-25 12:38:13
更大的問題是ASP.NET中的'static'意味着每個請求/用戶都將使用相同的變量。 – 2012-04-25 12:39:34