연산자오버로딩이란? 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 |