2012-11-30 62 views
1

每次按下按鈕時,我都會在文件中寫入一行文本。一次寫一條記錄,使用一個靜態類?

我已經定義了一個靜態類是這樣的:

public static class PalletRecord 
{ 
    public static string MachineName { get; set; } 
    public static DateTime TimeStamp { get; set; } 
    public static string BranchPlant { get; set; } 
    public static string Location { get; set; } 
    public static string Data { get; set; } 
    public static string ItemCode { get; set; } 
    public static string ItemDescription { get; set; } 
    public static decimal Quantity { get; set; } 
} 

每次我需要寫一個文件,我填充靜態類屬性和我使用File.AppendAllLines寫入文本文件。

我應該用非靜態類來完成它嗎?

+0

這裏可能沒有真正的'正確'答案。 *我*可能會使用該類的一個實例,但是如果您的方法使用靜態屬性,那麼誰說它是錯的? – hometoast

+0

Cana你展示瞭如何創建類的實例,你可以顯示Button_Click事件代碼..?這也是一個控制檯應用程序或WinForms應用程序..? – MethodMan

+0

是的,我肯定會寫一個不可變的類,它需要在它的構造函數中使用這些參數。 –

回答

6

是的!使用靜態來保持這樣的狀態會給你帶來麻煩。如果現在或將來需要多線程,這可能尤其如此,因爲靜態狀態是所有線程共享的。另一個問題可能是一個不完整的初始化錯誤,讓你從之前的記錄中獲得1/2的狀態,從新的記錄中獲得1/2的狀態。

更好的方法是將屬性設置爲非靜態,併爲每個記錄創建具有正確屬性的類的一個實例。你可以創建一個構造函數來設置屬性,這樣當你有一個實例時,你就知道你有一個有效的記錄(也可以考慮使屬性設置器保持私有狀態)。

這也更好地模擬您正在使用的問題。您在文件中編寫多個不同的記錄,這最好由表示記錄的類的實例來表示。在我看來,爲每個需要編寫的記錄使用類的實例是適當的乾淨的面向對象的方式。

+0

另一個問題是,如果你不記得重新初始化所有的值回到默認狀態(特別是如果你沒有設置每個值時間)將使用先前寫入的最後使用的值。 –

+1

是的,我也可以考慮其他問題,但不完整的初始化也很可能發生;補充說,答案。謝謝。 – driis

0

沒有太大區別。如果它起作用,那就行了。創建一個新的類使用更多的內存。無論如何,我會創建一個新課程,但並不是什麼大問題。如果它保存在數據庫中並丟棄,那麼你的解決方案就可以工作如果記錄保存在內存中,我會爲每條記錄創建一個新類。

+3

Works ...直到多個線程試圖一次使用它,或者您沒有完全「清除/重新初始化」以前用法中的值。 –

+1

我非常懷疑,由於創建了幾十個字節的類型的實例,會有嚴重的內存問題。他們的生命如此短暫,以至於它永遠不會添加任何值得思考的事情。 – Servy