На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Урок 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, си шарп, ООП





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




Урок 21. Создание таблицы с помощью миграции в Laravel
Программы шутки


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.