Esta pregunta surgió en los comentarios de this answer. La incapacidad de tener propiedades de solo lectura se propuso como una posible razón para usar campos en lugar de propiedades.¿Por qué las propiedades no pueden ser de solo lectura?
Por ejemplo:
class Rectangle
{
private readonly int _width;
private readonly int _height;
public Rectangle(int width, int height)
{
_width = width;
_height = height;
}
public int Width { get { return _width; } }
public int Height { get { return _height; } }
}
Pero ¿por qué no puedes hacer esto?
public int Width { get; readonly set; }
Editar (clarificación): Se puede conseguir esta funcionalidad en el primer ejemplo. Pero ¿por qué no puedes usar la taquigrafía de propiedad implementada automáticamente para hacer lo mismo? También sería menos desordenado, ya que no tendría que acceder directamente a los campos en su constructor; todo acceso sería a través de la propiedad.
Una mejor sintaxis sería 'public int Width {get; solo set de lectura; } ' – jason
@Jason: Eso parece mejor, lo he editado para su versión. –
@Jason: No sé, algo sobre el concepto de "setter de solo lectura" me parece muy extraño. Es fácil dar sentido aquí, en el contexto de esta pregunta, pero creo que si lo viera de la nada sería un momento de WTF. – Aaronaught