Porque readonly
, como private
, protege contra Murphy, no Machiavelli *.
Usamos readonly
y private
y cualquier otra cosa que restrinja lo que podemos hacer, principalmente porque con suerte hemos restringido las cosas más incorrectas, inconsistentes o simplemente estúpidas, que tenemos cosas útiles y fructíferas.
Pero son solo unos y ceros. Si alguna memoria está configurada en el número "42" y accedemos a ella a través de un campo de solo lectura, no fue de solo lectura cuando se creó el objeto. No hay nada que impida que se modifique, excepto que el compilador detecta "hey, primero dijiste que no querías cambiarlo, ahora estás tratando de cambiarlo, ¿qué da? Una de esas dos decisiones debe estar equivocada".
Ahora, no hay ninguna promesa de que la reflexión pueda cambiarlo, pero no hay ninguna promesa de que no lo hará. En este momento, la forma en que funciona la reflexión y la forma en que solo funciona significa que puedes cambiarla. Al menos, tomaría mucho trabajo (tal vez con los costos que nos afectan a los usuarios, así como al equipo que necesita implementar ese trabajo) para detener a alguien que presuntamente se tomó la molestia de hacer esto porque pensaban que tenían una buena razón.
Tenga en cuenta que los permisos relacionados con la reflexión hacen dejar de Maquiavelo,
* En sentido estricto, Murphy estaba hablando con precisión cómo debemos diseñar cosas para impedir que la gente accidentalmente haciendo algo desastroso - readonly
es un buen ejemplo, tapones que pueden' t físicamente estar enchufado en el camino equivocado alrededor de un mejor - y Maquiavelo estaba enseñando en lugar de practicar las técnicas.Sin embargo, no es para nada un dicho tan conciso.
Puede hacer todo tipo de cosas con la reflexión que no puede hacer normalmente. Puede obtener/configurar campos privados de otras clases, por ejemplo. Estoy casi seguro de que esto no es un error; en cuanto a si es deseable es otra historia. – Servy
Para robar una cita, solo tiene que protegerse contra "Murphy, no Maquiavelo" –
@Dennis: La otra pregunta simplemente pregunta si es posible, esta afirma que es posible, pero pregunta por qué (y por lo tanto es mucho más valiosa que el otro). –