Операторы |
и &
- это побитовые операции с целыми числами и активные логические операции с логическими операциями. Операторы ||
и &&
являются логическими операторами lazy в логических значениях.
Кроме того, при использовании && и || операторы в классе, почему | и & должны быть перегружены? Почему нельзя перегрузить только значения true и false для класса?
У вас есть класс Foo с перегруженным оператором true и false. Вы хотите, чтобы оператор &&
на Foo взял два Foo и вернул третий. Объясните, как вы планируете это делать, используя только операторы true и false.
Зачем нам нужны энергичные логические операторы в C #?
В случае, если вы хотите оценить побочные эффекты двух логических значений и применить к ним логическую операцию.
Я не понимаю, с && и || операторы, я хочу вернуть bool, а не другой тип.
Тогда вам не нужно перегружать ничего. Просто напишите оператор неявного преобразования из Foo в bool, и вы сможете использовать |, ||, & и && для вашего сердца.
Просто потому, что вы не хотите иметь && или || оператор, который возвращает что-то отличное от bool, не означает, что никто не делает. Предположим, что вместо Foo вы хотите написать трехзначный логический оператор, где значением может быть True, False или Neither. Вы можете определить & и | и && и || операторы True, False и Neither. Очевидно, вы не хотели бы, чтобы операторы возвращали bool; Вы хотите, чтобы они вернули Истину, Ложь или Ни того, ни другого.
Что я не понимаю, так это то, что | и операторы & имеют отношение к && и || операторы.
Они точно такие же операторы . Разница лишь в том, что ленивые не оценивают второй операнд, если это не нужно.
Почему должен | и & быть перегружен для использования || и хотя?
См. Предыдущий вопрос и ответ.
| и операторы & принимают два операнда.
Да, они делают. Так же и && и || операторы.