Я видел ответ Marc Gravell от 8 '09 мая в 13:29 :Есть ли способ установить свойство только один раз в качестве встроенного механизма?
public sealed class WriteOnce<T> { private T value; private bool hasValue; public override string ToString() { return hasValue ? Convert.ToString(value) : ""; } public T Value { get { if (!hasValue) throw new InvalidOperationException("Value not set"); return value; } set { if (hasValue) throw new InvalidOperationException("Value already set"); this.value = value; this.hasValue = true; } } public T ValueOrDefault { get { return value; } } public static implicit operator T(WriteOnce<T> value) { return value.Value; } } Then use, for example: readonly WriteOnce<string> name = new WriteOnce<string>(); public WriteOnce<string> Name { get { return name; } }
Но я не мог понять, почему бы один создать readonly WriteOnce<T>
, если его значение равно private
и он использует свойство Value
, которое может быть установлено только один раз. Также я не мог получить, почему бы один создать свойство Name
что только позволяет ГЭТ, но не набор так:
1.You не может установить значение зовут потому что она находится только для чтения и
2.Можно 't установить его значение через собственность, потому что это только получить.
'public WriteOnce Name {get}' не даст вам возможности создать экземпляр в «читаемом» виде 'var instance = new WriteOnce {Name =" test "};' – Fabio
@Fabio этот код даже не использует autoproperties Я почти уверен, что это довольно чертовски старый, и цель кода заключалась в том, что 'name' был задан с помощью аргумента конструктора. – InBetween
Большое спасибо, ваше объяснение с объяснением @Tom сделало это действительно ясным для меня – WeinForce