- 피연산자의 갯수가 3개인 조건부 연산자를 의미합니다.
- if else 구문을 한줄로 간단하게 표현할 수 있기 때문에 인라인 if(inline-if)라고도 합니다.
- if else 구문과 결과는 동일하지만 if else 구문은 여러줄로 작성되는 반면,
- 삼항연산자를 사용하면 한줄로 간단하게 표현할 수 있기 때문에 소스가 간결해집니다.
int left = 10;
int right = 20;
// 삼항 연산자
int bigger = left > right ? left : right; // left가 right 보다 크다면 left출력 아니면 right 출력
Console.WriteLine(bigger);
int abs = left >= 0 ? left : right; // left가 0과 크거나 같다면 left출력 아니면 right 출력
Console.WriteLine(abs);
사용자정의 자료형이나 클래스의 연산자를 재정의하여 여러 의미로 사용
- 기본연산자의 연산을 함수로 재정의하여 기능을 구현
- 기본연산자를 호환하지 않는 사용자정의 자료형에 기본연산자 사용을 구현함
public struct Position
{
public int x;
public int y;
public static Position operator +(Position left, Position right)
{
int x = left.x + right.x;
int y = left.y + right.y;
return new Position() { x=x, y=y };
}
}
static void Main(string[] args)
{
Position pos1 = new Position() {x=1,y=2 };
Position pos2 = new Position() {x=3,y=4 };
Position sumPos = pos1 + pos2;
}
this[]를 속성으로 정의하여 클래스의 인스턴스에 인덱스 방식으로 접근 허용
public class IndexerArray
{
private int[] array = new int[10];
public int this[int index]
{
get
{
return array[index];
}
set
{
array[index] = value;
}
}
}
void Main1()
{
IndexerArray array = new IndexerArray();
// 인덱서를 통한 인덱스 접근
array[5] = 20; // this[] set 접근
int i = array[5]; // this[] get 접근
}
- 인덱서는 다른 자료형 사용도 가능
- 열거형을 통해 인덱서를 사용하는 경우도 빈번
public enum Parts { Head, Body, Feet, Hand, SIZE }
public class Equipment
{
string[] parts = new string[(int)Parts.SIZE];
public string this[Parts type]
{
get
{
return parts[(int)type];
}
set
{
parts[(int)type] = value;
}
}
}
void Main2()
{
Equipment equipment = new Equipment();
equipment[Parts.Head] = "낡은 헬멧";
equipment[Parts.Feet] = "가죽 장화";
Console.WriteLine($"착용하고 있는 신발 : {equipment[Parts.Feet]}");
}