==> 연산자오버로드.cs



using System;

public class 연산자오버로드
{
    public static void Main()
    {
        // int 키워드를 Integer로 모방
        //Integer i = new Integer(10);
        Integer i = 10; // 위 라인 대체
        //Integer j = new Integer(20);
        Integer j = 20;
        //Integer k = new Integer(0);
        Integer k = 0;
        //i.Value++;를 i++;로 줄여쓰고 싶으면 단한연산자 오버로드 코드블록이 있어야 한다.
        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.Value);
        Console.WriteLine(k); // ToString() 메서드 오버라이드
    }

}

public partial class Integer
{
    // 상수형 필드 : 상수는 반드시 선언 동시 초기화
    public const int MaxValue = int.MaxValue;

    // 읽기전용 필드 :  선언동시초기화 또는 생성자초기화
    public static readonly int MinValue = int.MinValue;

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




==============================================================================================



==> Integer.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;
    }

    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);
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

75. 리스트제네릭클래스  (0) 2009.08.17
74. 예외처리  (0) 2009.08.17
72. 변환연산자  (0) 2009.08.17
71. 반복기(Iterator)  (0) 2009.08.17
70. 암시적으로 형식화된 로컬 변수  (0) 2009.08.17
Posted by holland14
: