[C#] 연산자 오버로딩

[원본 링크]

멍청한 자바와는 다르게 C#은 연산자 오버로딩으로 보다 직관적인 코딩이 가능하다.

일반적인 사용법은 C++과 크게 다르지 않다.

대부분의 연산자 오버로딩은 static 메소드로 구성된다.
마치 C++에서 friend함수를 클래스 내에서 정의하는 것과 유사한 형태를 지닌다.


대부분의 연산자는 이런식으로 인자 개수만 잘 맞춰주면 되는데 예외가 두가지 있다.

바로 형변환연산자와 인덱스접근이다.

인덱스의 오버로딩은 따로 인덱서라고 부르는데 어쨌든 연산자 확장하는거니까 여기다 묶어 쓴다.
인덱서는 일반적인 오버로딩과 다르다. 이건 정적메서드가 아니라 객체메서드로 정의된다.
형태는 이렇다.
접근제어자 반환타입 this[파라미터]
{
get{...}
set{...}
}



그럼 이번에는 형변환 연산자다.

형변환 오버로딩은 다시 돌아가서 정적메서드다.
그리고 아래와 같은 두가지 형태를 가진다.

접근제어자 static implicit operator 변환될타입(타입본인)
접근제어자 static explicit operator 변환될타입(타입본인)

위에거는 변환될만한 상황에는 전부다 바꿔버리는거고아래거는 명시적으로 캐스팅해야만 작동한다.
아래는 커스텀 배열타입에 암시적 캐스팅을 구현해본거다.ToString은 object 객체의 메서드로, 보통 클래스명을 반환해준다.저걸 explicit로 바꾸면 아마 빨간줄이 쳐질거다.그럼(string)array 이렇게 바꿔줘야 작동한다.

그럼 이만