true 연산자는 bool 값 true를 반환하여 피연산자가 확실히 true임을 나타내고 false 연산자는 피연산자가 확실히 false임을 나타내는 bool 값 true를 반환합니다.
true 및 false 연산자를 모두 구현하는 형식은 다음 의미 체계를 따라야 합니다.
- "이 개체가 true인가요?"는 연산자
true로 확인됩니다. 연산자true는 개체가true인 경우true를 반환합니다. 대답은 "예, 이 개체는 true입니다"입니다. - "이 개체가 false인가요?"는 연산자
false로 확인됩니다. 연산자false는 개체가true인 경우false를 반환합니다. 대답은 "예, 이 개체는 false입니다"입니다.
true 및 false 연산자는 서로를 보완한다고 보장되지 않습니다. 즉, true 및 false 연산자는 모두 bool 값을 동일한 false 피연산자에 반환할 수도 있습니다. 형식이 두 연산자 중 하나를 정의하는 경우 나머지 연산자도 정의해야 합니다.
팁
예를 들어 값이 세 개인 논리를 지원해야 하는 경우(예: 값이 세 개인 부울 형식을 지원하는 데이터베이스에서 작업하는 경우) bool? 형식을 사용합니다. C#은 & 피연산자를 사용하여 값이 세 개인 논리를 지원하는 | 및 bool? 연산자를 제공합니다. 자세한 내용은 부울 논리 연산자 문서의 Nullable 부울 논리 연산자 섹션을 참조하세요.
부울 식
정의된 true 연산자가 있는 형식은 if, do, while 및 for 문과 조건부 연산자?:에서 제어하는 조건식의 결과 형식일 수 있습니다. 자세한 내용은 C# 언어 사양의 부울 식 섹션을 참조하세요.
사용자 지정 조건부 논리 연산자
정의된 true 및 false 연산자가 있는 형식이 특정 방식으로 논리적 OR 연산자 또는 |를 &하는 경우, 조건부 논리적 OR 연산자|| 또는 조건부 논리적 AND 연산자&&가 해당 형식의 피연산자에 대해 각각 계산될 수 있습니다. 자세한 내용은 C# 언어 사양의 사용자 정의 조건부 논리 연산자 섹션을 참조하세요.
예제
다음 예제는 true 및 false 연산자를 둘 다 정의하는 형식을 제공합니다.
& 연산자도 해당 형식의 피연산자에 대해 계산될 수 있는 방식으로 논리적 AND 연산자 &&를 오버로드합니다.
public struct LaunchStatus
{
public static readonly LaunchStatus Green = new LaunchStatus(0);
public static readonly LaunchStatus Yellow = new LaunchStatus(1);
public static readonly LaunchStatus Red = new LaunchStatus(2);
private int status;
private LaunchStatus(int status)
{
this.status = status;
}
public static bool operator true(LaunchStatus x) => x == Green || x == Yellow;
public static bool operator false(LaunchStatus x) => x == Red;
public static LaunchStatus operator &(LaunchStatus x, LaunchStatus y)
{
if (x == Red || y == Red || (x == Yellow && y == Yellow))
{
return Red;
}
if (x == Yellow || y == Yellow)
{
return Yellow;
}
return Green;
}
public static bool operator ==(LaunchStatus x, LaunchStatus y) => x.status == y.status;
public static bool operator !=(LaunchStatus x, LaunchStatus y) => !(x == y);
public override bool Equals(object obj) => obj is LaunchStatus other && this == other;
public override int GetHashCode() => status;
}
public class LaunchStatusTest
{
public static void Main()
{
LaunchStatus okToLaunch = GetFuelLaunchStatus() && GetNavigationLaunchStatus();
Console.WriteLine(okToLaunch ? "Ready to go!" : "Wait!");
}
static LaunchStatus GetFuelLaunchStatus()
{
Console.WriteLine("Getting fuel launch status...");
return LaunchStatus.Red;
}
static LaunchStatus GetNavigationLaunchStatus()
{
Console.WriteLine("Getting navigation launch status...");
return LaunchStatus.Yellow;
}
}
&& 연산자의 단락 동작을 확인합니다.
GetFuelLaunchStatus 메서드가 LaunchStatus.Red를 반환하면 && 연산자의 오른쪽 피연산자는 계산되지 않습니다.
LaunchStatus.Red가 확실히 false이기 때문입니다. 따라서 논리적 AND의 결과가 오른쪽 피연산자의 값에 종속되지 않습니다. 예제 출력은 다음과 같습니다.
Getting fuel launch status...
Wait!
참고 항목
.NET