Шаг 199.
Язык программирования C#. Начала.
Перечисления и структуры. Операторные методы в структурах

    На этом шаге мы рассмотрим использование этих методов со структурами.

    Как отмечалось ранее, в структурах можно использовать операторные методы.


Напомним, что операторные методы описываются как открытые статические. Название операторного метода получается объединением ключевого слова operator и символа оператора. Количество аргументов операторного метода совпадает с количеством операндов в соответствующей операции (каждый аргумент отождествляется с операндом). Операторный метод должен возвращать результат.

    В примере ниже представлен очень скромный пример, в котором есть структура с операторными методами.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr199_1
{
    // Структура: 
    struct MyNum {
        // Закрытое целочисленное поле: 
        private int number;
        // Конструктор: 
        public MyNum(int n) {
            // Значение поля: 
            number = n;
        }
        // Метод для вычисления суммы экземпляра структуры 
        // и числа:
        public static int operator+(MyNum A, int n) { 
            return !A + n;
        }
        // Метод для вычисления суммы числа и 
        // экземпляра структуры: 
        public static int operator+(int n, MyNum A) { 
            return A + n;
        }
        // Метод для вычисления суммы двух экземпляров 
        // структуры:
        public static int operator+(MyNum A, MyNum B) { 
            return !A + !B;
        }
        // Метод для унарного оператора: 
        public static int operator!(MyNum A) { 
            return A.number;
        }
    }

    // Класс с главным методом: 
    class Program
    {
        // Главный метод:
        static void Main()
        {
            // Создание экземпляров структуры:
            MyNum A = new MyNum(100);
            MyNum B = new MyNum(200);
            // Использование операторных методов для вычисления 
            // значения выражений:
            Console.WriteLine("A: {0}", !A);
            Console.WriteLine("B: {0}", !B);
            Console.WriteLine("A + B: {0}", A + B);
            Console.WriteLine("A + 10: {0}", A + 10);
            Console.WriteLine("20 + B: {0}", 20 + B);
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    После выполнения программы получаем следующий результат:


Рис.1. Результат выполнения программы

    Структура MyNum содержит закрытое целочисленное поле number, конструктор с одним аргументом (определяет значение поля) и несколько версий операторных методов. Точнее, в структуре описаны операторный метод для унарного оператора ! и три версии операторного метода для бинарного оператора сложения +. Действие унарного оператора ! на экземпляр структуры определено таким образом, что результатом возвращается значение целочисленного поля этого экземпляра. Операторный метод для оператора +, когда операндами являются два экземпляра структуры, результатом возвращает сумму целочисленных полей этих экземпляров. Причем в теле операторного метода для получения значения целочисленного поля экземпляра структуры мы использовали оператор !. Далее, сумма экземпляра структуры и числа в результате дает сумму целочисленного поля экземпляра и данного числа. Сумма числа и экземпляра структуры вычисляется как сумма экземпляра структуры и числа.

    В главном методе программы мы создаем два экземпляра структуры MyNum и с их помощью проверяем работу операторных методов.

    На следующем шаге мы рассмотрим структуры и события.




Предыдущий шаг Содержание Следующий шаг