본문 바로가기
C#/etc.

[C#] as, is 키워드

by 스누누피 2024. 12. 12.

 

C#에서 형변환을 하기 위해서 캐스트 연산자를 사용한다.

 

캐스트 연산자 case 1.

값을 변환할 때 사용되는 경우

double d = 10.5;
int i = (int)d;

Console.WriteLine(d); // 10.5
Console.WriteLine(i); // 10

 

캐스트 연산자 case 2.

열거형에서 사용되는 경우

enum City{
    Seoul,
    Daejeon,
    Daegu,
    Busan
}
int busan = (int)City.Busan;

Console.WriteLine(busan); // 3

 

캐스트 연산자 case 3.

참조 형식의 형변환 경우

private void button_click(object sender, EventArgs e)
{
    MessageBox.Show((Button)sender.Text + "Clicked");
}

 

이중 참조 형식의 형변환은 별로 좋은 방식이 아니다.

어떤 클래스의 인스턴스를 전혀 다른 클래스의 참조 변수로 캐스팅을하면 예외가 발생하기 때문이다.

class A { }
class B { }
object a = new A();
B b = (B)a; // InvalidCastException : 'A' 형식 개체를 'B' 형식으로 캐스팅할 수 없습니다.

 

이때 사용하기에 적합한 연산자가 as 연산자이다.


as 연산자

as 연산자는 객체를 캐스팅할때 사용되는 연산자다.

캐스팅에 성공하면 캐스팅 결과를 반환하고, 캐스팅에 실패하면 null을 리턴해 예외를 피할 수 있다.

class Parent { }
class Children : Parent
{
    public void isSuccess()
    {
        Console.WriteLine("Casting Success");
    }
}
Parent p = new Parent();
Parent p2 = new Children();

Children c;

c = p as Children;
if (c != null) c.isSuccess();

c = p2 as Children;
if (c != null) c.isSuccess(); // Casting Success

 

주의할 점은 as 연산자는 null을 허용할 수 있는 참조 형식에만 사용이 가능하다는 점이다.

 

is 연산자

is 연산자는 캐스팅 유무를 확인할 수 있는 연산자로 캐스팅이 가능하면 True, 캐스팅이 불가능하면 False를 반환한다.

class Parent { }
class Children : Parent
{
    public void isSuccess()
    {
        Console.WriteLine("Casting Success");
    }
}
Console.WriteLine(p is Children); // False
Console.WriteLine(p2 is Children); // True

 

is 연산자의 경우에는 조건문에 사용하기에 적합한 문법이라고 볼 수 있다.

'C# > etc.' 카테고리의 다른 글

[C#] 열거형 Enum  (0) 2024.12.16
[C#] 연산자 오버로딩 (Operator Overloading)  (1) 2024.12.11
[C#] ? 문법 (question mark)  (1) 2024.11.28