반응형
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으로 선언되어야 하고 함수의 인자가 ref나 out 이어서는 안된다.
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
반응형
'프로그래밍' 카테고리의 다른 글
[C#] enum과 문자열 치환/변환 <속성(어트리뷰트)을 이용한 간단 치환 방법> (2) | 2011.02.25 |
---|---|
[C#] DataGridView, ListView 속도 향상법 (0) | 2011.02.22 |
[C#] 초간단 성능테스트 하기 (0) | 2011.01.20 |
[C#] ?? 연산자(물음표 두개) (0) | 2011.01.19 |
[C#]에서 메모리 비트맵의 이미지 이동 [이미지 + 이미지 -> 이미지] (0) | 2011.01.19 |
댓글