На этом шаге мы рассмотрим пример, в котором используются оба аксессора.
Начиная с этого шага мы проанализируем несколько примеров, содержащих классы, в которых описываются и используются свойства. Сначала рассмотрим пример, представленный ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr122_1 { // Класс со свойством: class MyClass { // Закрытые целочисленные поля: private int first; private int last; // Конструктор с двумя аргументами: public MyClass(int a, int b) { first = a; // Значение первого поля last = b; // Значение второго поля } // Переопределение метода ToString(): public override string ToString() { // Формирование текстового значения: string txt = "Поля объекта: "; txt += first + " и " + last; // Результат метода: return txt; } // Целочисленное свойство: public int number { // Метод вызывается при считывании значения свойства: get { // Запоминается значение второго поля: int t = last; // Новое значение второго поля: last = first; // Новое значение первого поля: first = t; // Значение свойства: return t; } // Метод вызывается при присваивании // значения свойству: set { // Новое значение второго поля: last = first; // Присваивание значения первому полю: first = value; } } } // Класс с главным методом: class Program { // Главный метод: static void Main() { // Создание объекта: MyClass obj = new MyClass(1, 9); // Проверка значений полей объекта: Console.WriteLine(obj); // Проверка значения свойства: Console.WriteLine("Свойство number: {0}", obj.number); // Проверка значений полей объекта: Console.WriteLine(obj); // Присваивание значения свойству: obj.number = 5; // Проверка значений полей объекта: Console.WriteLine(obj); // Проверка значения свойства: Console.WriteLine("Свойство number: {0}", obj.number); // Проверка значений полей объекта: Console.WriteLine(obj); // Прозерка значения свойства: Console.WriteLine("Свойство number: {0}", obj.number); // Проверка значений полей объекта: Console.WriteLine(obj); // Присваивание значения свойству: obj.number = 3; // Проверка значений полей объекта: Console.WriteLine(obj); // Задержка: Console.ReadLine(); } } }
Ниже представлен результат данной программы.
Рис.1. Результат выполнения программы
В программе описан класс MyClass с двумя закрытыми полями целочисленного типа first и last, конструктором с двумя аргументами и свойством number. При вызове конструктора аргументы, переданные ему, присваиваются значениями полям объекта. Свойство number реализовано таким образом, что мы можем и прочитать значение свойства, и присвоить значение свойству. Но последовательность операций, которые выполняются при считывании значения свойства и при присваивании значения свойству, не самая тривиальная. А именно, если мы считываем значение свойства number, то значением возвращается текущее значение поля last, но при этом свойства first и last меняются значениями. Если мы присваиваем значение свойству number, то присваиваемое значение записывается в поле first, а текущее значение поля first присваивается полю last.
В главном методе программы командой
MyClass obj = new MyClass(1, 9);
Console.WriteLine(obj);
При проверке значения свойства number (инструкция obj.number) значение свойства равно 9, а поля first и last обмениваются значениями (новые значения 9 и 1).
При присваивании значения 5 свойству number командой
obj.number = 5; ,
obj.number = 3; ,
На следующем шаге мы продолжим изучение этого вопроса.