2013-10-05 3 views
1

내 말은, 어쨌든 좋은 습관이라고 확신하지만 컴파일러에 의해 강제되는 기술적/개념적 이유가 있습니까? 아니면 미학만을 적용하고 있습니까?확장 메소드가 정적 클래스에서만 정의 될 수있는 이유는 무엇입니까?

+2

가능한 복제 http://stackoverflow.com/questions/3930335/why-are-extension-methods-only-allowed-in-non-nested-non-generic-static-class?lq=1 http : // /stackoverflow.com/questions/2618271/why-is-it-impossible-to-declare-extension-methods-in-a-generic-static-class?lq=1 http://stackoverflow.com/questions/2731695/extension-method-requires-class-to-be-static? lq = 1 – MichaC

+0

아마도 컴파일러에서 확장 메소드를 검색하는 속도가 빨라지므로이를 적게 봐야합니다. 그러나 클래스를 속성으로 태그를 추가하면 더 잘 작동하지 않을지 또는 실제로 전혀 문제가되는 경우 (색인 된 캐시에서 읽은 후에 한 번만 걸을 필요가 있는지) 확실하지 않습니다. – CodesInChaos

답변

1

C# 계층 아래에서이 동작이 발생할 이유는 없습니다. IL 레이어 확장 메서드 및 정적 클래스로 시작하는 것은 중요하지 않습니다 (중요하지 않은 변경 또는 사용자 지정 특성 제외).

이것은 코드 명료성을 위해 언어 디자이너가 만든 선택입니다. 어떤 근본적인 이유에서이 방법 일 필요는 없습니다.

다른 유사한 제한 사항이 있습니다. 예를 들어, 중첩 클래스에 확장을 정의 할 수 없습니다.

1

제 생각에 이것은 개념적인 움직임입니다.

정적 클래스 방법 대한 순수한 컨테이너처럼 동작 자체는 객체을 대표하지 않으며, 자체적으로 확장 방법 만 입력를 처리하고 싫어하는 역할을 수행하는 방법 인 개체 동작의 일부

그래서 나는 그들이 C#의 성격 상 매우 유사하다고 생각합니다. 아마도 그것이 언어로 연결되어있는 이유 일 것입니다.