2014-04-09 95 views
-4

開始日期在多個位置使用,它默認爲某個值。如何在多線程環境中將變量聲明爲靜態屬性

我可以聲明這是一個常量或靜態屬性。

DateTime dtStart = DateTime.Now.AddYears(-2).AddMonths(-1).ToShortDateString(); 

編輯

string dtStart = DateTime.Now.AddYears(-2).AddMonths(-1).ToShortDateString(); 

我錯過了提一提,我想知道它在多線程環境中的行爲,並改變了數據類型爲字符串。

+0

你爲什麼不只是嘗試做正是你的描述,看看會發生什麼? –

+1

常量和靜態屬性是兩個不同的東西。你不能改變一個常量,但你可以改變一個靜態屬性。你究竟想問什麼?順便說一句'ToShortDateString()'會返回一個字符串,而不是'DateTime'對象 – Habib

+1

還不熟悉如何正確提問? http://stackoverflow.com/help – Aybe

回答

0

由於值發生變化,所以不能保持不變。你可以很容易使它成爲一個靜態屬性在您的類:

public static string StartDate 
{ 
    get 
    { 
     return DateTime.Now.AddYears(-2).AddMonths(-1).ToShortDateString(); 
    } 
} 

注意:爲了更容易地測試你的代碼,你應該通過這些方法的開始日期,而不是讓他們都稱這個屬性。

而且,它似乎很奇怪,你希望它返回一個字符串...

對於多線程,每個線程將調用這個屬性本身。這將是沒有問題,因爲該屬性不會修改任何狀態。

+0

你的意思是我需要有像GetStartDate()方法並返回值。 – Sunny

+0

是的,將該代碼移動到方法或屬性。 – David

0

嘗試使用

public static class Uitl { 

    public static DateTime DateStart = default(DateTime); 

    public Uitl(){ 
     if(DateStart == default(DateTime)) 
     DateStart = DateTime.Now.AddYears(-2).AddMonths(-1); 

    } 

} 

或一類項目中的靜若存在使用

Session["DateStart"] = DateTime.Now.AddYears(-2).AddMonths(-1).ToShortDateString();