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 |