C#

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

Godffs 2009. 8. 18. 01:26
반응형
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
다운로드

반응형