Section 3.4: 묵시적 캐스팅 연산자와 명시적 캐스팅 연산자
C# 은 사용자 정의 타입들로 하여금 explicit
과 implicit
키워드를 이용해서 대입 (assignment) 과 캐스팅 (casting) 을 관리할 수 있도록 해 준다. 메소드의 시그니처 (signature) 는 아래와 같은 형식을 따른다:
public static <implicit/explicit> operator <ResultingType>(<SourceType> myType)
해당 메소드는 더 많은 파라미터를 받을 수도 없으며, instance 메소드로 만들 수도 없다. 그러나, 해당 메소드는 자신이 정의된 타입의 어떠한 private 멤버에게도 접근이 가능하다.
묵시적 및 명시적 캐스팅의 예제가 아래에 나와 있다:
public class BinaryImage {
private bool[] _pixels;
public static implicit operator ColorImage(BinaryImage im) {
return new ColorImage(im);
}
public static explicit operator bool[](BinaryImage im) {
return im._pixels;
}
}
위 예제 클래스는 아래와 같은 캐스팅 문법으로 사용 가능하다:
var binaryImage = new BinaryImage();
ColorImage colorImage = binaryImage; // 묵시적 캐스팅. 타입 정보가 주어지지 않았음을 주목한다.
bool[] pixels = (bool[])binaryImage; // 명시적 캐스팅, 타입을 정의한다
캐스팅 연산자는 사용자의 타입으로부터 (from) / 그리고 사용자의 타입으로 (to) 의 양방향 모두에 대해 동작한다:
public class BinaryImage {
public static explicit operator ColorImage(BinaryImage im) {
return new ColorImage(im);
}
public static explicit operator BinaryImage(ColorImage cm) {
return new BinaryImage(cm);
}
}
마지막으로, 타입 계층 (hierarchy) 내에서의 캐스팅에 사용될 수 있는 as
키워드는 이 상황에서 유효하지 않다. 명시적이나 묵시적인 캐스팅을 정의한다고 해도, 아래와 같은 작업을 수행할 수는 없다:
ColorImage cm = myBinaryImage as ColorImage;
위 시도는 컴파일 에러를 발생시킬 것이다.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
3.6: ? : 삼항 연산자 (0) | 2020.11.02 |
---|---|
3.5: 단락 평가 (Short-circuiting) 연산자 (0) | 2020.10.28 |
3.3: 관계 연산자 (Relational Operator) 들 (0) | 2020.10.26 |
3.2: 동등 (equality) 연산자 재정의하기 (0) | 2020.10.22 |
3.1: 재정의 가능한 연산자들 (0) | 2020.10.20 |