Ответ 1

Операторы true и false могут быть перегружены, чтобы позволить классу представлять свое собственное состояние как true или false, например:

public class MyClass
{
    //...
    public static bool operator true(MyClass op)
    {
        // Evaluation code...
    }

    public static bool operator false(MyClass op)
    {
        // Evaluation code...
    }
}

И вы сможете использовать оператор в булевых выражениях:

MyClass test = new MyClass(4, 3);
if (test)
    Console.WriteLine("Something true");
else
    Console.WriteLine("Something false");

string text = test ? "Returned true" : "Returned false";

Ответ 2

Вы бы перегружали операторы true или false, если вы определяли специализированное логическое значение. Это обычно не требуется, поэтому они не кажутся полезными. Например, в логическом классе с нечеткой логикой у вас может быть что-то вроде этого:

// Represents a boolean that can store truth values in a range from [0, 1], with
//   a value of one indicating complete metaphysical certitude and a value of
//   zero indicating complete impossibility.
public class FuzzyBoolean {
// ...
   public static bool operator true(FuzzyBoolean fb) {
      return fb.TruthValue > 0;
   }

   public static bool operator false(FuzzyBoolean fb) {
      return fb.TruthValue == 0;
   }
// ...
}

Обратите внимание, что если вы перегружаете true, вы также должны перегружать false (и наоборот).

Конечно, существуют также литералы true и false, два литерала, которые вы можете назначить булевому экземпляру. Не путайте их с указанными выше операторами. Более существенный пример того, как вы это используете, с использованием логических элементов в базе данных, приведен в документах MSDN здесь.

Ответ 4

Они позволяют вам перегружать их с помощью синтаксиса перегрузки оператора, так что определяемый вами тип можно интерпретировать как логическое.

Ответ 5

До С# 2.0 операторы true и false использовались для создания пользовательских типов значений NULL, которые были совместимы с типами, такими как SqlBool. Однако теперь язык обеспечивает встроенную поддержку типов с нулевыми значениями, и, когда это возможно, вы должны использовать их вместо перегрузки операторов true и false. Для получения дополнительной информации. С нулевым значением Booleans выражение a!= B необязательно равно! (A == b), поскольку одно или оба значения могут быть нулевыми. Вам нужно перегрузить операторы true и false отдельно, чтобы правильно идентифицировать нулевые значения в выражении. В следующем примере показано, как перегружать и использовать операторы true и false.

Ответ 6

Позволяет использовать пользовательский тип как часть логических операций; Например, как часть инструкции if или while.