Blog Content

    티스토리 뷰

    73.C# - 연산자 오버로드

    반응형
    Program.cs
    using System;
    public class 연산자오버로드
    {
        public static void Main()
        {
            //선언과 동시에 초기화 변환연산자 사용 (int 키워드를 Integer로 모방)
            //Integer i = new Integer(10);
            Integer i = 10; //위 라인 대체

            Integer j = 20; //Integer j = new Integer(20);
           
            Integer k = 0; //Integer k = new Integer(0);

            //i.Value++;
            i++; //단항 연산자 오버로드
            --j;

            //Integer k = i + j;
            //k.Value = i.Value + j.Value;
            k = i + j; //이항 연산자 오버로드
            k = k - i;
           
            Console.WriteLine(Integer.MaxValue);
            Console.WriteLine(Integer.MinValue); //읽기전용필드로 사용했음
            Console.WriteLine(k); //ToString() 메서드 오버라이드
        }
    }

    public partial class Integer //공개는 상수형, 읽기전용이 아니면 공개안함
    {
        //상수형 필드 : 상수는 반드시 선언 동시 초기화

        //public static int MaxValue = int.MaxValue;//외부의 공개를 막기 위해
                                        
        public const int MaxValue = int.MaxValue; //상수형으로 모방

        //읽기전용 필드 : 선언 동시에 초기화 또는, 생성자 초기화
        public static readonly int MinValue = int.MinValue; //필드로 선언.
                                                                                    외부에 공개됨.

        //정적생성자를 통해서 읽기전용 필드 초기화가능
        static Integer() { MinValue = int.MinValue; }
    }

    상수형필드와 읽기전용필드의 의미는 상수는 반드시 선언 동시 초기화
    읽기전용필드는 선언 동시 초기화 또는 생성자를 통해서 초기화


    Interger.cs
    using System;
    public partial class Integer
    {
        private int value;
        public Integer(int value) { this.value = value;  }

        public int Value  {
            get { return value; } //필드
            set { this.value = value; } //키워드
        }

        //변환연산자
        public static implicit operator Integer(int value)  {
            return new Integer(value);
        }

        //ToString() 메서드 오버라이드
        public override string ToString() {
            return value.ToString(); //기본 값을 외부에 개체명으로 공개
        }

        //단항 연산자 오버로드
        public static Integer operator ++(Integer data)  {
            return ++data.value; //data= value로 써도 상관없음      
        }
        public static Integer operator --(Integer data)  {
            return --data.value; }


        //이항 연산자 오버로드
        public static Integer operator +(Integer a, Integer b)  {
            return (a.value + b.value);
        }
        public static Integer operator -(Integer a, Integer b)  {
            return (a.value - b.value); }
    }

    결과화면


    73.연산자오버로드.zip
    다운로드

    반응형

    Comments