Урок 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, ООП




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Рецензия на Лес повешенных лисиц от Арто Паасилинна
Урок 13. Индексаторы C#
Особенности перенаправления с google.com