Операторы истинности
Пара operator true и operator false
описывает логическое состояние типа в if
и циклах. Для && и || дополнительно
нужны operator & или operator |,
которые возвращают тот же тип, а не bool.
Иначе составные условия не соберутся.
Синтаксис
public static bool operator true(Тип value)
public static bool operator false(Тип value)
public static Тип operator &(Тип left, Тип right)
public static Тип operator |(Тип left, Тип right)
Пример
Давайте проверим объект в условии if:
using System;
class Signal
{
public int Power;
public static bool operator true(Signal signal)
{
return signal.Power > 0;
}
public static bool operator false(Signal signal)
{
return signal.Power <= 0;
}
public static Signal operator &(Signal left, Signal right)
{
int power = left.Power > 0 && right.Power > 0 ? 1 : 0;
return new Signal { Power = power };
}
public static Signal operator |(Signal left, Signal right)
{
int power = left.Power > 0 || right.Power > 0 ? 1 : 0;
return new Signal { Power = power };
}
}
class Program
{
static void Main()
{
var signal = new Signal { Power = 5 };
if (signal)
{
Console.WriteLine("on");
}
}
}
Результат выполнения кода:
"on"
Пример
Давайте применим && с перегруженным operator &:
using System;
class Signal
{
public int Power;
public static bool operator true(Signal signal)
{
return signal.Power > 0;
}
public static bool operator false(Signal signal)
{
return signal.Power <= 0;
}
public static Signal operator &(Signal left, Signal right)
{
int power = left.Power > 0 && right.Power > 0 ? 1 : 0;
return new Signal { Power = power };
}
public static Signal operator |(Signal left, Signal right)
{
int power = left.Power > 0 || right.Power > 0 ? 1 : 0;
return new Signal { Power = power };
}
}
class Program
{
static void Main()
{
var left = new Signal { Power = 5 };
var right = new Signal { Power = 0 };
Signal res = left && right;
Console.WriteLine(res ? "on" : "off");
}
}
Результат выполнения кода:
"off"
Пример
Давайте применим || с перегруженным operator |:
using System;
class Signal
{
public int Power;
public static bool operator true(Signal signal)
{
return signal.Power > 0;
}
public static bool operator false(Signal signal)
{
return signal.Power <= 0;
}
public static Signal operator &(Signal left, Signal right)
{
int power = left.Power > 0 && right.Power > 0 ? 1 : 0;
return new Signal { Power = power };
}
public static Signal operator |(Signal left, Signal right)
{
int power = left.Power > 0 || right.Power > 0 ? 1 : 0;
return new Signal { Power = power };
}
}
class Program
{
static void Main()
{
var left = new Signal { Power = 0 };
var right = new Signal { Power = 3 };
Signal res = left || right;
Console.WriteLine(res ? "on" : "off");
}
}
Результат выполнения кода:
"on"