2011-05-09 26 views
2

我安裝了resharper,它向我建議我應該修改一些局部變量爲const。我從來沒有聽說過這個,所以我開始使用Google搜索。 MSDN肯定有一些本地const的代碼,但沒有解釋爲什麼。在stackoverflow我遇到了問題,但有更多的是否有一個本地常量比沒有他們更快。使用本地const

所以,我在這裏撓我的腦袋。爲什麼有可能有一個本地const?它是否與語義有關?有一些好處嗎?也許兩個?

回答

2

Const有一個主要好處:它的價值是不可改變的,這強化了代碼的穩定性和可靠性。

假設您必須在某些方法執行過程中定義某種日期格式,並且僅適用於此方法。你爲什麼不使用常量?

public void SomeMethod() 
{ 
    const string dateFormat = "MM/dd/yyyy"; 

    ... // Lot of operations 


    return Date.Now.ToString(dateFormat); 
} 

如果您可以使用常數,則可避免人爲錯誤。

+0

你是對的。我只是在頭腦中(例如讓我們來看你的例子)那個dateFormat不會改變,因爲它看起來不那麼難以鬆開dateFormat的軌跡,並且意外地附加了另一個值,因爲它在一個方法中。 – DerMeister 2011-05-09 09:00:41

+0

是的,但你知道我們是怎樣的人類...我們犯了錯誤,我們遠非完美哈哈 – 2011-05-09 10:38:05

1

擁有本地const只是一個範圍界定問題。而不是const可用於整個類或該類的使用者(如果const是公共的),它僅在聲明它的方法中可用。

爲了說明爲什麼ReSharper建議重構,我已經將生成的IL包含在一個簡單的示例中。

沒有常量:

string s = "foo"; 
Console.WriteLine(s); 

生成的IL:

ldstr  "foo" 
stloc.0  
ldloc.0  
call  System.Console.WriteLine 

隨着常量:

const string s = "foo"; 
Console.WriteLine(s); 

生成的IL:

ldstr  "foo" 
call  System.Console.WriteLine 
+0

無論是局部變量還是局部常量(均在方法中聲明),值的範圍都是相同的。 – 2011-05-09 08:45:36

+0

@Fredrik - 我認爲他正在繪製一個局部const和非本地(例如class level)const之間的對比 - 這可能是大多數人熟悉看到const關鍵字(在C#中)的地方 – 2011-05-09 08:48:50

+0

@FredrikMörk:是的,並且我想回答這個問題_爲什麼有可能有一個本地常量?_ – 2011-05-09 08:51:13