나는 의 메소드/속성이 원래 범위에 있다고 생각했습니다.
그들입니다. 그러나 확장 방법은 기본 범위에서 이 아니라 방법이 this
입니다. 컴파일러가 제공하는 구문 설탕을 통해 액세스 할 수있는 정적 메서드입니다. 이 입력 ExtensionMethod
의 범위가 당신이 현재하고있는 클래스의 확장 방법 인 경우 : 당신이 이미 알고 있지만, 단지 명확하게 생각하는
this.ExtensionMethod();
은 ...과 동일 :
SomeStaticClass.ExtensionMethod(this);
this
필요는 매개 변수 ExtensionMethod
-로 전달한다. 위의 첫 번째 방법은 컴파일러가이 작업을 수행하는 것입니다.
당연히, 그들은 컴파일러가 확장 메소드와 클래스 멤버를 기본 범위로 "가져 오는"다른 것들을 구현할 수있었습니다. 그들은 단지 선택하지 않았습니다. 개인적으로 나는 그것을 좋아한다. 하지만 주관적인 문제라고 생각합니다. 어쨌든, this
을 입력하는 것을 싫어한다면, 그것은 단지 작은 성가심 일뿐입니다. 맞습니까?
using Namespace.Where.Extension.Method.Is.Located
을 그리고 정적한다 확장 방법을 보관 유지하는 클래스를 잊지 마세요 :
정확히 ... 확장 메서드가 정의 된 클래스는 정적이므로 결코 인스턴스를 가질 수 없으므로이 메서드의 사용은 메서드 본문에서 잘못되었습니다. –
@Paul : 저는 그것이 OP가 요구하는 것이라고 생각하지 않습니다. 나는 그가 왜'T' 타입의 코드에 있고'T'에 대한 확장 메소드를 가지고 있다면 왜 this.MyMethod()'*를'T' * 대신에'T' *에 넣어야하는지 궁금합니다. 'MyMethod()'. –
* 다시 두 번 질문하기 * 당신은 절대적으로 맞습니다 ... :) 내 의견은 어쨌든이 정확한 질문과 관련이 없습니다. –