본문 바로가기
프로그래밍

[C#] Operator Overloading in C#

by 건우아빠유리남편 2011. 2. 8.
반응형

1. C# 과 C++ 은 syntax 가 비슷하지만, C++ 에서 Overloading 이 가능한 것이 C# 에서는 금지된 것들이 있다. 아래 표가 C#의 Operator에 대한 Overloadability를 나타낸 표이다.

=====================================================================================================
Operators                           Overloadability
+, -, *, /, %, &, |, <<, >>         All C# binary operators can be overloaded.
+, -, !,  ~, ++, --, true, false    All C# unary operators can be overloaded.
==, !=, <, >, <= , >=               All relational operators can be overloaded,
                                     but only as pairs.
&&, ||				    They can't be overloaded
() (Conversion operator)	    They can't be overloaded
+=, -=, *=, /=, %=                  These compound assignment operators can be
                                     overloaded. But in C#, these operators are
                                    automatically overloaded when the respective
                                    binary operator is overloaded.

=, . , ?:, ->, new, is, as, sizeof  These operators can't be overloaded
========================================================================================
2. 오버로딩을 하기 위해서는 operator function 이라고 불리는 함수를 사용해야 한다. 이때 이 함수는 꼭 static 이나 public으로 선언되어야 하고 함수의 인자가 refout 이어서는 안된다.
3. 크게 unary와 binary 의 두가지 형태의 operator가 존재한다. 간단하게 생각해서 
  1) public static {클래스 이름} operator -(클래스 이름 c)
     public static {클래스 이름} operator +(클래스 이름 c, 클래스 이름 d)
 와 같은 두가지 형태가 존재 할 수 있고 그 함수가 선언되었다면 그 안에서 각 클래스의 attribute를 사용하여 계산을 하고 return 값을 반환한다 고 생각하면 간단하다.

4. 중요한 점들을 적어보면
 1) 연산자를 오버로딩 하더라도 해당 연산자의 syntax 를 바꿀 수는 없다. 예를 들어 + 연산자는 바이너리 연산자 이고 왼쪽과 오른쪽에 대한 처리를 한다는 것을 말이다.
 2) 사용자가 코딩한 것이 기본적으로 정의되어 있는 것을 우선한다.
 3) void 타입을 리턴 할 수 없다.
 4) 다른 메소드들과 마찬가지로 오버로드 될 수 있는데 이때 signature의 구분은 리턴타입으로 되는 것이 아니라 인자들의 개수와 타입으로 결정이 된다.
 5) 바이너리 연산자 를 오버로드 하면 그에 따라 = 연산자는 자동으로 오버로드 된다.

참고 : http://www.csharphelp.com/archives/archive135.html

출처 : http://akachuki.egloos.com/4378877
반응형

댓글