На этом шаге мы рассмотрим оформление свойства, как статического.
Свойство может быть статическим. С технической точки зрения особенность такого свойства в том, что оно описывается с ключевым словом static. Но поскольку свойство не связано с областью памяти, то наличие в классе статического свойства обычно подразумевает, что для реализации этого свойства используются статические поля. Неболыной пример, показывающий, как может быть описано статическое свойство, представлен в примере ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr126_1 { // Класс со статическим свойством: class Fibs { // Закрытые целочисленные статические поля: private static int last = 1; private static int prev = 1; // Статическое целочисленное свойство: public static int number { // Метод вызывается при считывании значения свойства: get { // Локальная переменная: int res = prev; // Изменение значения статических полей: last = last + prev; prev = last - prev; // Значение свойства: return res; } // Метод вызывается при присваивании // значения свойству: set { // Начальное значение статических полей: prev = 1; last = 1; // Изменение значения статических полей: for (int k = 2; k <= value; k++) { last = last + prev; prev = last - prev; } } } } // Класс с главным методом: class Program { // Главный метод: static void Main() { // Отображение значения статического свойства: for(int k = 1; k <= 10; k++){ Console.Write("{0,4}", Fibs.number); } Console.WriteLine(); // Присваивание значения статическому свойству: Fibs.number = 6; // Отображение значения статического свойства: for(int k = 1; k <= 10; k++){ Console.Write("{0,4}", Fibs.number); } Console.WriteLine(); // Присваивание значения статическому свойству: Fibs.number = 1; // Отображение значения статического свойства: for(int k = 1; k <= 10; k++){ Console.Write("{0,4}", Fibs.number); } Console.WriteLine(); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы следующий.
Рис.1. Результат выполнения программы
Мы описали класс Fibs со статическим свойством number. При проверке значения свойства результатом оно возвращает число из последовательности Фибоначчи. Причем каждый раз это число новое.
При присваивании значения свойству number число, которое присваивается свойству, определяет порядковый номер числа из последовательности Фибоначчи, которое будет возвращаться в качестве значения свойства. Например, если мы присваиваем свойству number значение 6, то это означает, что при считывании значения свойства мы получим значение 8, поскольку именно число 8 является шестым по счету в последовательности Фибоначчи. Если далее мы еще раз прочитаем значение свойства number, то получим значение 13, а затем при считывании значения свойства получим значение 21 и гак далее.
Для реализации такого подхода мы описываем два закрытых целочисленных статических поля last и prev с начальными единичными значениями. Эти поля нам нужны для того, чтобы записать в них значения двух последних чисел из последовательности Фибоначчи. Нам нужно именно два числа, поскольку следующее число в последовательности вычисляется как сумма двух предыдущих. Начальные значения полей объясняются тем, что первые два числа в последовательности - это 1 и 1.
Свойство number описано с ключевым словом static. В get-аксессоре свойства объявляется локальная переменная res, в которую записывается значение поля prev. Затем выполняются две команды
last = last + prev;
prev = last - prev; ,
В set-аксессоре для свойства number командами
prev = l ;
last = l;
last = last + prev;
prev = last - prev; .
В главном методе программы запускается конструкция цикла, в которой выполняется 10 итераций. За каждую итерацию в консольном окне отображается значение, возвращаемое инструкцией Fibs.number.
Console.Write("{0,4}", Fibs.number); .
В результате в консольном окне отображаются первые 10 чисел из последовательности Фибоначчи. Затем командой
Fibs.number = 6;
Fibs.number = 1;
На следующем шаге мы начнем знакомство с индексаторами.