2009-07-06 103 views
47

在C#中,匿名類型的屬性是隻讀的:爲什麼C#中匿名類型的屬性是隻讀的?

var person = new { Surname = "Smith", OtherNames = "John" }; 
person.Surname = "Johnson"; // ERROR: .Surname is read-only 

當然我可以聲明一個真正的類,如果我想要寫的字段或屬性,但無論如何,這是什麼設計決定背後的理由使屬性爲只讀?

+0

安全,也許?如果你沒有指定它們是可寫的,不要讓它們被寫入?此外,這些是屬性,而不是領域。 – 2009-07-06 22:03:58

+0

好點,我會改變文字。我也想知道他們爲什麼不能用「readonly」聲明域... – 2009-07-06 22:05:36

回答

50

關於那個有趣的文章here。從那裏...

... [B]Ÿ確保成員們 沒有改變,我們確保哈希對於 object.This的壽命 常數允許匿名類型 是與 哈希表等集合一起使用,而當成員被修改時實際上沒有丟失 。 有很多的在 immutabilty的好處,這極大地 簡化了使用 對象,因爲在創建時只能分配 值,然後只用代碼 (想想線程)