可能重複:
What are the benefits to marking a field asreadonly
in C#?爲什麼在C#只讀使用
我一直使用在C#中的情況下只讀的關鍵字,我知道我只需要設置參考一次對象(例如,ASP.NET頁面上的WCF服務連接)。除了簡單地確保對象不能被設置一次以外,使用readonly比使用私有或私有靜態的標準引用還有什麼優勢?看起來很模糊。是否有性能影響?
可能重複:
What are the benefits to marking a field asreadonly
in C#?爲什麼在C#只讀使用
我一直使用在C#中的情況下只讀的關鍵字,我知道我只需要設置參考一次對象(例如,ASP.NET頁面上的WCF服務連接)。除了簡單地確保對象不能被設置一次以外,使用readonly比使用私有或私有靜態的標準引用還有什麼優勢?看起來很模糊。是否有性能影響?
除了性能差異外,我認爲最大的好處是您可以提供有用的信息,瞭解變量的用途和用途(編輯:當其他人接管維護時,這更具價值你的代碼...)
另外,正如你所說,它可以防止某人覆蓋你的意思是一個恆定的價值。我認爲這是足夠的理由...
readonly
僅用於防止任何人意外或故意在設置變量後更改變量的值。它在運行時執行。
const
是類似的,但在編譯時執行。因此,必須在創建變量時設置該值。
其中任何一個都可以與其他修飾符結合使用,例如public
,private
或static
。
A readonly
字段只能在字段初始化或在構造函數中設置。這爲持續維護提供了相當大的好處,因爲您可以確定它是在創建對象時設置的,而不是自此以後更改爲其他對象。沒有性能優勢。
一般而言,您不應將可變類型的字段標記爲只讀,因爲對象本身可以隨後進行修改。 FxCop爲此定義了警告規則 - http://msdn.microsoft.com/en-us/library/ms182302(v=vs.120).aspx
對象可以修改,如果它是一個可變的引用類型。項目可以添加到聲明爲readonly的列表中。 – 2010-07-29 18:08:09
您不應該因爲這個原因聲明只讀可變引用類型:http://msdn.microsoft.com/en-us/library/ms182302%28VS.80%29.aspx。但要提出一個好點。 – 2010-07-30 07:58:34
@DavidNeale:即使對象的各種屬性可能發生變化,但知道引用類型字段總是指向同一對象通常是非常有用的信息。除此之外,在任何給定的抽象層次上,當只有一個可變級別時比在兩個或多個可變級別時更容易維護線程安全(這是一個很重要的原因'List
明確的目的和用法似乎是使用readonly
的最佳理由。雖然你可以爭辯說,你可以留下寫作,因爲它尚未得到保護,也不需要。
只要記住,而裁判不能爲只讀改變,如果對象是可變對象的狀態仍然可以改變(即添加到列表中的項目)
我讀過的一些描述'只讀'和你的似乎不同。你確定它是正確的嗎?我是一個Java人,但從我讀過的內容來看,'readonly'只能防止在構造函數或聲明之外重新分配引用。你寫的東西聽起來很像Java的'final'。 – Vlasec 2015-02-19 09:09:08