[Effective C#] 아이템 3: 캐스트보다는 is, as가 좋다
C# 카테고리의 다른 글
아이템 3: 캐스트보다는 is, as가 좋다
캐스트는 형변환 연산자가 개입될 수 있어서 일관성이 떨어진다.
public class SecondType
{
private MyType _value;
// 형변환 연산자 (SecondType -> MyType)
public static implicit operator MyType(SecondType t)
{
return t.value;
}
}
형변환 연산자는 객체의 런타임 타입이 아니라 컴파일타임 타입에 맞춰 수행된다.
object o = Factory.GetObject(); // o는 SecondType
// o는 SecondType
// as
MyType t = o as MyType // o 가 MyType이 아니면 null
// cast
MyType t1 = (MyType)o; // o가 MyType이 아니면 InvalidCastException
컴파일러는 o가 SecondType인지 모르기 때문에 둘 다 실패한다.
캐스트는 사용자 정의 형변환으로 인해 o가 선언된 타입에 따라 다른 결과를 반환한다.
as는 o가 선언된 타입에 상관 없이 동일한 결과를 반환한다. (일관성 높음)
더 방어적으로 코드를 작성하기 위해서는 is 연산자로 형변환이 가능한지 먼저 확인하면 된다.
o is MyType
댓글남기기