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();
}
В отличие от оператора 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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP