as & is 키워드
as와 is
- 형변환을 위한 예약어
- 개발자에 의해서 의도적으로 downcasting하도록 도와주는 연산자
- downcasting
- 베이스 클래스가 파생 클래스로 캐스팅 되는 것
- upcasting
- 파생 클래스가 베이스 클래스로 캐스팅 되는 것
is | as |
---|---|
* 형변환 여부를 bool 값으로 반환 * as로 직접 형변환을 시도하기 보다 is를 사용해 형변환 가능 여부를 먼저 사용 |
* 형변환이 가능하면 수행 * 불가능한 경우에는 null 반환 * 형변환에 대해 안정성을 지향 |
public class Parent
{
// ...
}
public class Derived : Parent
{
// ...
}
static void Main()
{
Parent p1 = new Parent();
Parent p2 = new Derived();
// is를 이용해 형변환 가능 여부를 확인
if (p1 is Derived)
{
// false
}
if (p2 is Derived)
{
// true
}
// as를 이용해 형변환
Parent d1 = p1 as Derived();
Derived d2 = p2 as Derived();
if (d1 != null)
{
// false
}
if (d2 != null)
{
// true
}
}
null checking
if (input is null)
{
return;
}
if (result is not null)
{
Console.WriteLine(result.ToString());
}
- is는 null인지 여부를 확인할 때 쓸 수도 있다
- C# 9.0부터 negation pattern도 확인 가능
int[] empty = { };
int[] one = { 1 };
int[] odd = { 1, 3, 5 };
int[] even = { 2, 4, 6 };
int[] fib = { 1, 1, 2, 3, 5 };
Console.WriteLine(odd is [1, _, 2, ..]); // false
Console.WriteLine(fib is [1, _, 2, ..]); // true
Console.WriteLine(fib is [_, 1, 2, 3, ..]); // true
Console.WriteLine(fib is [.., 1, 2, 3, _ ]); // true
Console.WriteLine(even is [2, _, 6]); // true
Console.WriteLine(even is [2, .., 6]); // true
Console.WriteLine(odd is [.., 3, 5]); // true
Console.WriteLine(even is [.., 3, 5]); // false
Console.WriteLine(fib is [.., 3, 5]); // true
- C# 11부터는 list 패턴을 확인하는 키워드로도 사용한다
- 별 걸 다 지원한다