2009-07-06 18 views
47

En C#, las propiedades de los tipos anónimos son de sólo lectura:¿Por qué las propiedades de los tipos anónimos en C# son de solo lectura?

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

Por supuesto que se puede declarar una clase real si quiero campos o propiedades de escritura, pero a pesar de lo que es el razonamiento detrás de esta decisión de diseño de hacer las propiedades de solo lectura?

+0

Seguridad, ¿tal vez? Si no especificó que podían escribirse, ¿no los deja escribir? Además, esas son propiedades, no campos. –

+0

Buen punto, voy a cambiar el texto. También me pregunté por qué no podían ser campos declarados con "readonly" ... –

+1

http://stackoverflow.com/questions/622664/what-is-immutability-and-why-should-i-worry-about- es –

Respuesta

50

Artículo interesante sobre eso here. A partir de ahí ...

... [B] y asegurar que los miembros no no cambia, nos aseguramos de que el hash es constante durante toda la vida de la object.This permite tipos anónimos para ser utilizado con colecciones como hashtables, sin perder realmente cuando se modifican los miembros. Hay una gran cantidad de beneficios de immutabilty en eso, es drásticamente simplifica el código que utiliza el objeto ya que sólo se pueden asignar valores cuando se crea y luego simplemente utilizan (piense enhebrar)

+0

Ese es un gran enlace, gracias! –

+10

Sí, la inmutabilidad tiene muchos beneficios, pero la mutabilidad también presenta muchos beneficios: puede usar el argumento anterior para argumentar que las Listas también deben ser inmutables. Esta decisión no tiene ningún sentido. –

+0

Estoy de acuerdo con Danny. Esta decisión no tiene ningún sentido. – tomexou

Cuestiones relacionadas