2010-02-23 4 views
5

가능한 중복 :
Why must C# operator overloads be static?왜 정적 키워드 함수 서명하기 전에

왜 정적 키워드와 같은 C#에서 모든 오버로드 된 연산자 함수 서명하기 전에 :

공공 정적 void operator = (Object a, Object b)

우리가 d 일 때 aing = b; 값은 암묵적으로 올바르게 전달됩니다. 따라서 정적 키워드가 필요 없습니다. 그것은 같아야합니다 :

공백 void operator = (Object b)

그것은 맞습니까?

+0

이 게시물은 문제에 대해 더 자세히 설명해 줄 수 있습니다. http://stackoverflow.com/questions/2018108/why-must-c-operator-overloads-be-static/ –

답변

9

연산자가 정적이라는 사실은 null 값이있는 상황에서 연산자를 사용할 수있게합니다. 또한 연산자가 이 아니고이 다형 적으로 적용된다는 사실을 강조합니다. (그들은 정적이 아니었다면 그들은 잠재적으로 인정 하듯이, 다형 적으로 적용 할 수있는 ...하지만 최우선은 일반적으로 어쨌든 IMO 좋은 생각 일 것이다.)

(어쨌든 C#에서 할당 연산자를 오버로드 할 수 없습니다 .)

+0

할당 연산자를 오버로드 할 수 없습니다. 어쨌든 C#에서 왜? – Sunil

+0

@ Sunil : 가독성 측면에서 불쾌하고 사악한 경우 인 IIRC가 있기 때문입니다. 암시 적 변환을 제공 할 수 있습니다. 대입 연산자를 오버로드하려는 대부분의 경우에 대처할 수 있습니다. –

0

그렇지 않으면 항상이를 수행하기 위해 객체의 인스턴스가 필요합니다. a 또는 b가 널 (null) 인 경우 가질 수없는 항목.