블로그 이미지
Magic_kit
study 관련자료를 한곳으로 자기 개발 목적으로 재태크 재무 관리 목적으로 일상생활의 팁을 공유 하기 위하여 블로그를 개설 하였습니다.

calendar

1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

Category

Recent Post

Recent Comment

Archive

2009. 8. 17. 16:31 .Net Project/.Net C#
반응형

연산자오버로딩이란? 
C#에서는 사용자 정의 형식에서 operator 키워드로 정적 멤버 함수를 정의하여 연산자를 오버로드할 수 있습니다.

 연산자  오버로드 가능성  +, -, !, ~, ++, --, true, false : 오버로드 가능   
 
+, -, *, /, %, &, |, ^, <<, >> : 이 이항 연산자는 오버로드할 수 있습니다.
 
==, !=, <, >, <=, >= :  비교 연산자는 오버로드할 수 있습니다.
 
&&, || :  조건 논리 연산자는 오버로드할 수 없지만, 오버로드 가능한 & 및 |를 사용
 
[]  :  배열 인덱싱 연산자는 오버로드할 수 없지만 인덱서를 정의할 수 있습니다.
 
() :  캐스트 연산자는 오버로드할 수 없지만 새로운 변환 연산자를 정의
 
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= :  할당 연산자는 오버로드할 수 없다.

=, ., ?:, ->, new, is, sizeof, typeof :  이 연산자는 오버로드할 수 없습니다.

 사용자 지정 클래스에 대한 연산자를 오버로드하려면 올바른 시그니처를 사용하여
 클래스 의 메서드를 만들어야 합니다.
 
 이 메서드의 이름은 "operator X"여야 합니다.
 여기서 X는 오버로드하려는 연산자의 이름이나 기호입니다. 
 단항 연산자에는 매개 변수가 하나이고, 이항 연산자에는 매개 변수가 두 개입니다.
 각각의 경우에 매개 변수 중 하나는 연산자를 선언하는 클래스나 구조체와
 동일한 형식으로 사용.

 Program.cs

using System;
public class 연산자오버로드
{
    public static void Main()
    {
        //int 키워드를 Integer로 모방
        Integer i = 10;
        Integer j = 20;
        Integer k = 0;
       
        //i.Value++; //증간연산자 적용
        //i++; //단항 연산자 오버로드 구현 되어있어야만 가능

        //k.Value = i.Value + j.Value;
        //k = i + j; //이항연산자 활용
       
        //Integer i = new Integer (10);
        //Integer j = new Integer (20);
        //nteger k = new Integer (0); //Tostring() 메서드 오버라이드

        Console.WriteLine(Integer.MaxValue);
        Console.WriteLine(Integer.MinValue);        
        Console.WriteLine(k);
        //Console.WriteLine(k.Value);
    } 
   
}
public partial class Integer
{
    //상수형 필드 선언 : 상수는 반드시 선언 동시 초기화
    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;
    }

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

}

반응형

'.Net Project > .Net C#' 카테고리의 다른 글

92장 제네릭클래스(List Generic Class)  (0) 2009.08.17
91장 예외처리(Exception)  (0) 2009.08.17
89장 변환연산자  (0) 2009.08.17
88장 반복기(Iterator)  (0) 2009.08.17
87장 암시적으로 형식변환  (0) 2009.08.17
posted by Magic_kit