對C# 中Readonly的再認識
很多人知道readonly 和 const 以及他們的區別和聯系,本文只要對readonly 的一個小特性進行記錄,屬於讀書筆記吧
請看如下代碼
public sealed class AType { public static readonly Char[] TestChars = new Char[] {'A', 'B', 'C'}; }
這句代碼很簡單 我只是對靜態只讀字段TestChars賦初始值。這時候如果我問你我現在可以改變TestChars的值嗎,你肯定會回答當然不可以,真的是這樣嗎,請仔細思考下.
請看如下代碼
class Program { static void Main(string[] args) { AType.TestChars[0] = 'X'; AType.TestChars[1] = 'Y'; AType.TestChars[2] = 'Z'; Console.WriteLine(AType.TestChars[0]); Console.Read(); } }
這個輸出結果是什么呢,是編譯的時候報錯還是會輸出修改后的值“X”呢 答案是輸出為“X”
在看如下代碼
class Program { static void Main(string[] args) { AType.TestChars = new Char[] {'X', 'Y', 'Z'}; Console.WriteLine(AType.TestChars[0]); Console.Read(); } }
這個輸出結果又是什么呢。。。 答案是編譯出錯提示“無法對靜態只讀字段賦值”
看到這里,我想大家都明白了:當某個字段是引用類型,並且該字段標記為readonly時,那么不可改變的是引用,而非字段引用的對象.