Каковы истинные и ложные операторы в C #? - PullRequest
14 голосов
/ 26 марта 2009

Каково назначение и влияние операторов true и false в C #? Официальная документация по ним безнадежно не объясняет.

Ответы [ 6 ]

12 голосов
/ 26 марта 2009

Вы бы перегрузили операторы 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 здесь .

11 голосов
/ 26 марта 2009

Операторы 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";
4 голосов
/ 26 марта 2009

См. Ссылочный пример в статье

C # Language Specification - Булевый тип базы данных

По сути, эти операторы позволяют использовать экземпляр типа в логической условной логике, такой как && и ||.

2 голосов
/ 17 мая 2012

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

2 голосов
/ 26 марта 2009

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

0 голосов
/ 26 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...