Этот вопрос возник в комментариях this answer. Невозможность иметь свойства readonly была предложена в качестве потенциальной причины использовать поля вместо свойств.Почему свойства не могут быть прочитаны только?
Например:
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; } }
}
Но почему вы не можете просто сделать это?
public int Width { get; readonly set; }
Edit (осветление): Вы можете достичь этой функциональности в первом примере. Но почему вы не можете использовать автоматически реализованное сокращение свойств, чтобы сделать то же самое? Это также было бы менее беспорядочно, поскольку вам не приходилось напрямую обращаться к полям в вашем конструкторе; весь доступ будет через собственность.
Лучшим синтаксисом будет 'public int Width {get; набор только для чтения; } '. – jason
@ Джейсон: Кажется, это лучше - я отредактировал его к вашей версии. –
@ Джейсон: Я не знаю, что-то о концепции «только для чтения сеттера» кажется мне очень странным. Здесь легко понять, в контексте этого вопроса, но я думаю, что если бы я увидел это неожиданно, это был бы момент WTF. – Aaronaught