C# 入門 & 実践 / C sharp

3-18. 変換演算子(キャスト)オーバーロード / implicit / explicit


int i = 0;
long l = 0;

l = i; (暗黙的な変換)
i = (int)l ; (明示的な変換)

暗黙的な変換が可能な場合は、implicit
明示的な変換が必要な場合は、explicit

    class Hello
    {
        private int x = 0;
        private int y = 10;
        public Hello()
        {
        }
        public Hello( int x )
        {
            this.x = x;
        }
        // 暗黙的 int->Hello
        public static implicit operator Hello(int i)
        {
            return new Hello(i);
        }
        // 明示的 Hello->int
        public static explicit operator int(Hello h)
        {
            return h.x;
        }

        public void XY()
        {
            Console.WriteLine("x = {0} , y = {1}",x,y);
        }
    }

    class Tester
    {
        static void Main(string[] args)
        {
            int i = 0;
            Hello h = new Hello( 1 );
            
            // int へキャスト
            i = (int)h;
            // i = h は当然出来ない。
            Console.WriteLine("i = {0}",i);
            i++;

            // Hello でキャスト
            Hello h2 = (Hello)i;
            h2.XY();
            
            // 暗黙的!!!
            Hello h3 = i;
            h3.XY();

        }
    }

i = 1
x = 2 , y = 10
x = 2 , y = 10

と出力されて OK .




3-17. 演算子のオーバーロード! « 3. C# 入門 / 基礎、型、文法、基本? » 3-19. 構造体( struct ) とクラス( class )の違い。

C# 入門 & 実践 / C sharp