TransWikia.com

Оператор false при перегрузки логических операторов

Stack Overflow на русском Asked on August 27, 2020

В какой ситуации вызывается вторая перегрузка, то есть для оператора false?

    public static void Main()
    {
        var prog = new Programm();
        if(prog)
            Console.WriteLine("Hello");
    }

    public static bool operator true(Programm prog)
    {
        return false;
    }

    public static bool operator false(Programm prog)
    {
        throw new Exception();
    }

One Answer

В отличие от оператора true, использование оператора false выглядит совсем не очевидно.

Согласно спецификации, оператор && вычисляется как T.false(x) ? x : T.&(x, y)

Таким образом, он вызовется в выражениях a && b.

Однако, чтобы можно было использовать && дополнительно надо определить оператор &

Например:

public static void Main(string[] args)
{
   if (new Program() && new Program()) Console.WriteLine("1"); // NotImplementedException
}
public static bool operator true(Program p) => false;
public static bool operator false(Program p) => throw new NotImplementedException();
public static Program operator &(Program p1, Program p2) => new Program();

Correct answer by Grundy on August 27, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP