автоматически реализуемое свойство только для чтения или же только для записи нельзя, поскольку оба аксессора,getиset,должны быть указаны при объявлении такого свойства. Тем не менее добиться желаемого результата все же можно, объявив один из аксессоров автоматически реализуемого свойства какprivate.В качестве примера ниже приведено объявление автоматически реализуемого свойстваLengthдля классаFailSoftArray,которое фактически становится доступным только для чтения.
public int Length { get; private set; }
СвойствоLengthможет быть установлено только из кода в его классе, поскольку его аксессорsetобъявлен какprivate.А изменять свойствоLengthза пределами его класса не разрешается. Это означает, что за пределами своего класса свойство, по существу, оказывается доступным только для чтения. Аналогичным образом можно объявить и свойствоError,как показано ниже.
public bool Error { get; private set; }
Благодаря этому свойствоErrorстановится доступным для чтения, но не для установки за пределами классаFailSoftArray.
Для опробования автоматически реализуемых вариантов свойствLengthиErrorв классеFailSoftArrayудалим сначала переменныеlenиErrFlag,поскольку они больше не нужны, а затем заменим каждое применение переменныхlenиErrFlagсвойствамиLengthиErrorв классеFailSoftArray.Ниже приведен обновленный вариант классаFailSoftArrayвместе с методомMain, демонстрирующим его применение.
// 'Применить автоматически реализуемые и доступные // только для чтения свойства Length и Error.
using System;
class FailSoftArray {
int[] a; // ссылка на базовый массив
// Построить массив по заданному размеру, public FailSoftArray(int size) { a = new int [size];
Length = size;
}
// Автоматически реализуемое и доступное только для чтения свойство Length, public int Length { get; private set; }
// Автоматически реализуемое и доступное только для чтения свойство Error, public bool Error { get; private set; }
// Это индексатор для массива FailSoftArray. public int this[int index] {
// Это аксессор get. get {
if(ok(index) ) {
Error = false; return a[index];
} else {
Error "= true; return 0;
}
}
// Это аксессор set. set {
if(ok(index)) {
a[index] = value;
Error = false;
}
else Error = true;
}
}
// Возвратить логическое значение true, если // индекс находится в установленных границах, private bool ok(int index) {
if(index >= 0 & index < Length) return true; return false;
}
}
// Продемонстрировать применение усовершенствованного // отказоустойчивого массива, class FinalFSDemo { static void Main {