Какова цель и эффект операторов true
и false
в С#? Официальная документация на них безнадежно не требует пояснений.
Что такое истинные и ложные операторы в С#?
Ответ 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 здесь.
Ответ 3
См. ссылочный пример в статье
Спецификация языка С# - логический тип базы данных
По существу, эти операторы допускают экземпляр типа, который должен использоваться в логической условной логике, такой как &&
и ||
.
Ответ 4
Они позволяют вам перегружать их с помощью синтаксиса перегрузки оператора, так что определяемый вами тип можно интерпретировать как логическое.
Ответ 5
До С# 2.0 операторы true и false использовались для создания пользовательских типов значений NULL, которые были совместимы с типами, такими как SqlBool. Однако теперь язык обеспечивает встроенную поддержку типов с нулевыми значениями, и, когда это возможно, вы должны использовать их вместо перегрузки операторов true и false. Для получения дополнительной информации. С нулевым значением Booleans выражение a!= B необязательно равно! (A == b), поскольку одно или оба значения могут быть нулевыми. Вам нужно перегрузить операторы true и false отдельно, чтобы правильно идентифицировать нулевые значения в выражении. В следующем примере показано, как перегружать и использовать операторы true и false.
Ответ 6
Позволяет использовать пользовательский тип как часть логических операций; Например, как часть инструкции if или while.