Урок 9. Перегрузка True и False в C#
На девятом уроке в учебнике по объектно-ориентированному программированию на языке C# мы продолжим обсуждение перегрузки операторов. В данной статье описана перегрузка операторов true и false, позволяющая использовать объект в условной обработке.
True и False как операторы
Ключевые слова true и false имеют много применений в C#. Одно из этих применений - это пара операторов внутри класса, которые позволяют классу представлять свое собственное состояние как истинное или ложное. Определение результата осуществляется в закодированных программистом правилах. Это эффективно дает неявное преобразование типа в логическое значение, которое затем может использоваться в сценариях условной обработки, таких как оператор if или условный оператор (?).
В этой статье используется класс Vector, разработанный в предыдущей статье.
Добавление операторов True и False
Поведение по умолчанию
Поведение по умолчанию любого класса заключается в отсутствии поддержки операторов true и false. Это означает, что если будет предпринята попытка оценить объект такого класса как Boolean, то код не будет скомпилирован. Это можно продемонстрировать, используя векторный объект в качестве условия в операторе if. Измените основной метод программы VectorDemo следующим образом и попытайтесь скомпилировать его, чтобы увидеть ошибку.
static void Main(string[] args) { Vector test = new Vector(4, 3); if (test) Console.WriteLine("True"); else Console.WriteLine("False"); }Перегрузка true и false
Синтаксис перегрузки операторов true и false аналогичен синтаксису других унарных операторов. Существуют два ограничения. Во-первых, возвращаемое значение должно быть логическим. Во-вторых, недопустимо перегружать только один из двух операторов; если истинный оператор перегружен, то он должен быть ложным и наоборот.
public static bool operator true(op-type operand) { // код оценки } public static bool operator false(op-type operand) { // код оценки }Добавление True и False в класс Vector
Класс Vector теперь можно обновить, включив в него перегруженные версии операторов true и false. В случае векторов объект будет считаться "истинным", если любое из свойств вектора X или Y не равно нулю. Если значения X и Y равны нулю, объект будет оцениваться как false. Это просто реализуется путем добавления следующего кода:
public static bool operator true(Vector v) { if ((v.X != 0) || (v.Y != 0)) return true; else return false; } public static bool operator false(Vector v) { if ((v.X == 0) && (v.Y == 0)) return true; else return false; }Тестирование кода
Теперь, когда эти два оператора были добавлены, вы должны быть в состоянии скомпилировать и выполнить основной метод, описанный выше. Поскольку координаты вектора X и Y не равны нулю, код выводит текст "True". Если вы измените объявление вектора следующим образом, код выведет false вместо этого.
static void Main(string[] args) { Vector test = new Vector(0, 0); if (test) Console.WriteLine("True"); else Console.WriteLine("False"); // "False" }
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.