Section 3.4: 묵시적 캐스팅 연산자와 명시적 캐스팅 연산자

C# 은 사용자 정의 타입들로 하여금 explicitimplicit 키워드를 이용해서 대입 (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/

반응형

+ Recent posts