Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Применение модификаторов доступа в аксессорах
В классе PropAccess аксессор set указан как private. Это означает, что он доступен только другим членам данного класса, например методу IncrProp(), но недоступен для кода за пределами класса PropAccess. //применить модификатор доступа в асессоре using System; class PropAccess { int prop;//поле, управляемое свойством МуРrор public PropAccess() { prop = 0; } /* Это свойство обеспечивает доступ к закрытой переменной экземпляра prop. Оно разрешает получать значение переменной prop из любого кода, но устанавливать его — только членам своего класса. */ public int MyProp { get { return prop; } private set {// теперь это закрытый аксессор prop = value; } } // Этот член класса инкрементирует значение свойства МуРrор. public void IncrProp() { MyProp++; //Допускается в. том же самом классе. } } // Продемонстрировать применение модификатора доступа в аксессоре свойства. class PropAccessDemo { static void Main() { PropAccess ob = new PropAccess(); Console.WriteLine("Первоначальное значение ob.MyProp: " + ob.MyProp); // ob.МуРrор = 100; // недоступно для установки ob.IncrProp(); Console.WriteLine("Значение ob.MyProp после инкрементирования: " + ob.MyProp); } } Вероятно, ограничение доступа к аксессорам оказывается наиболее важным для работы с автоматически реализуемыми свойствами. Как пояснялось выше, создать автоматически реализуемое свойство только для чтения или же только для записи нельзя, поскольку оба аксессора, get и set, должны быть указаны при объявлении такого свойства. Тем не менее добиться желаемого результата все же можно, объявив один из аксессоров автоматически реализуемого свойства как private. В качестве примера ниже приведено объявление автоматически реализуемого свойства Length для класса FailSoftArray, которое фактически становится доступным только для чтения. public int Length { get; private set; } Аналогичным образом можно объявить и свойство 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() { FailSoftArray fs = new FailSoftArray(5); // Использовать свойство Error. for (int i = 0; i < fs.Length + 1; i++) { fs[i] = i * 10; if (fs.Error) Console.WriteLine("Ошибка в индексе " + i); } } } На применение модификаторов доступа в аксессорах накладываются следующие ограничения. 1. Во-первых, действию модификатора доступа подлежит только один аксессор: set или get, но не оба сразу. 2. Во-вторых, модификатор должен обеспечивать более ограниченный доступ к аксессору, чем доступ на уровне свойства или индексатора. 3. И наконец, модификатор доступа нельзя использовать при объявлении аксессора в интерфейсе или же при реализации аксессора, указываемого в интерфейсе. (Подробнее об интерфейсах речь пойдет в главе 12.) Date: 2015-09-02; view: 387; Нарушение авторских прав |