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); } } |
결과화면
반응형