2012-10-31 3 views
1

클래스에서 연산자를 오버로드하여 비공개로 설정하여 클래스 내에서만 사용할 수있게하려고했습니다. 내가 오류 메시지 "사용자 정의 연산자를 가지고 컴파일하려고 할 때
그러나 ... 정적 공개 선언해야합니다 :왜 오버로드 된 연산자는 공개로 선언해야합니까?

왜 그들이 공개해야합니까

+0

관련 질문은 다음과 같습니다. 수업 중에 만 사용하려면 왜 운영자가되어야합니까? –

+0

예, 확실한 해결 방법입니다. 그러나 나는 왜 내가 해결 방법을해야만하는지 알고 싶다.실제 연산자를 사용하면 수학 방정식이 수학 방정식처럼 보입니다. – 3Pi

+0

게시 할 수 있습니까? 저는 이것이 수업 내에서만 어떻게 유용 할 수 있는지에 대해 정말로 관심이 있습니다. – ivowiblo

답변

0

가의 절반 부분에 대답하기 위해? 귀하의 질문에 당신은 에릭 Lippert의에 의해 블로그 게시물을 볼 수 있습니다. 오히려

Why are overloaded operators always static in C#?

가하는 잠재적 인 언어 기능에 직면했을 때 우리가 우리 자신을 요청해야 할 질문은 "미상입니다 기능의 강력한 이점은 모든 비용을 정당화하는 것입니다. "그리고 비용은 보다 훨씬 많기 때문에 기능을 문서화하고 유지 관리하는 데 드는 일상적인 설계 비용이 많이 듭니다. 더 미묘한 비용이 있습니다, 처럼,이 기능은 추후에 추론 알고리즘을 변경하기가 더 어려워 집니까? 이로 인해 우리는 세계로 나아갈 수 있습니까? 호환성 휴식 시간을 거치지 않고 변경할 수 있습니까? 등등.

이 특정한 경우에있어서, 그다지 유익한 효과는 없습니다. 에 가상 디스패치 오버로드 연산자를 C#으로 만들려면 을 정적 파트에서 매우 쉽게 만들 수 있습니다. 예를 들어 :

public class B { 
    public static B operator+(B b1, B b2) { return b1.Add(b2); } 
    protected virtual B Add(B b2) { // ... 

그리고 거기 당신은 그것이있다. 따라서 혜택은 적습니다. 그러나 비용은 입니다. C++ 스타일의 인스턴스 연산자가 이상합니다. 예를 들어, 그들은 대칭을 깨고 입니다. C +와 int를 취하는 연산자 +를 정의하면 c + 2는 유효하지만 2 + c는 그렇지 않습니다. 따라서 연산자가 어떻게 동작해야하는지 에 대한 우리의 직감이 크게 나빠집니다.

질문의 다른 부분은 왜 공개되어야합니까?.

본격적인 소스를 찾을 수 없지만 IMO가 공용이 아니며 클래스 내에서만 사용될 수있는 경우 IMO는 오버로드 된 것이 아닌 간단한 개인 메서드를 사용하여 수행 할 수 있습니다. 운영자. 우리는 전체의 운영자에 대한 액세스 권한을 갖고 싶어하기 때문에

당신은 의미를해야 모든 운전자 과부하가 공공 및 정적해야 RB 휘태커

Operator Overloading

으로 블로그 게시물을 볼 수 있습니다 프로그램이며, 클래스의 특정 인스턴스가 아닌 이 아닌 전체 클래스에 속하기 때문입니다.

+2

예,하지만 내부 운영자도 재미있을 수 있습니다. 추론을 비공개로 제한하지 마십시오. – InBetween

관련 문제