Переменные поля readonly имеют большую гибкость, нежели const, потому что позволяют перед присваиванием производить различные вычисления значения, которое должно быть "только для чтения". Правило использования таких полей говорит, что вы можете присваивать им значение только в конструкторе, и нигде более. Одной из основных особенностей таких полей, является то, что они могут пренадлежать и экземплярам класса, а не быть статическими. Это позволяет получать различные значения полей только для чтения в разных экземплярах классов. Это значит, что в отличие от полейconst, если вы хотите сделать поле readonly статическим, то должны явно обьявить его таковым.
В качестве примера можно рассмотреть случай, когда в зависимости от купленной лицензии - меняется функциональная часть программы. При более дорогой лицензии - программа позволяет работать с большим количеством документов (если у нас MDI-приложение). Тогда в конструкторе мы определяем по какой лицензии работает пользователь, и в зависимости от ее типа, присваиваем обявленной переменной, с типом readonly, значение количества допустимых документов.
В описанном выше примере, примерный код будет выглядеть так:
В данном конкретном примере, мы обьявляем нашу переменную как статическую, и используем ее в экземпляре класса при каждом запуске программы. Функция CheckMaxNumDocs какраз должна проверить тип лицензии по которой работает пользователь, и венрнуть количество максимально допустимых документов, с которыми может работать пользователь с данной лицензией.
public class MdiEditor
{
public static readonly uint MaxDocuments;
static MdiEditor()
{
MaxDocuments = CheckMaxNumDocs();
}
}
Полями readonly могут быть обьявлены различные типы данных, в подтверждение этому покажу и такой код:
В итоге получаем текущую дату CurrentDate, которую изменить дальше по коду - нельзя.
public class NextSample
{
public readonly DateTime CurrentDate;
public NextSample()
{
CurrentDate = new DateTime(2008, 2, 6);
}
}
Поля readonly представляют собой куда более гибкий инструмент, нежели const, потому что это вычисляемое поле. Удачного применения и спасибо за внимание.
Комментариев нет:
Отправить комментарий