Оператор false при перегрузки логических операторов
В какой ситуации вызывается вторая перегрузка, то есть для оператора 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();
}
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
В отличие от оператора 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();