다음과 같은 C # 코드의 여러 인스턴스를 보았습니다.
public static int Foo(this MyClass arg)
this
이 경우 키워드의 의미에 대한 설명을 찾지 못했습니다 . 통찰력이 있습니까?
다음과 같은 C # 코드의 여러 인스턴스를 보았습니다.
public static int Foo(this MyClass arg)
this
이 경우 키워드의 의미에 대한 설명을 찾지 못했습니다 . 통찰력이 있습니까?
답변:
이것은 확장 방법 입니다. 설명 은 여기를 참조하십시오 .
확장 메서드를 사용하면 개발자가 기존 CLR 형식의 공용 계약에 하위 메서드를 추가하거나 원래 형식을 다시 컴파일하지 않고도 새 메서드를 추가 할 수 있습니다. 확장 방법은 오늘날 동적 언어에서 널리 사용되는 "오리진 입력"지원의 유연성과 강력한 형식 언어의 성능 및 컴파일 타임 유효성 검사를 결합하는 데 도움이됩니다.
확장 방법은 다양한 유용한 시나리오를 가능하게하며 실제로 강력한 LINQ 쿼리 프레임 워크를 가능하게합니다.
그것은 당신이 전화를 할 수 있다는 것을 의미합니다
MyClass myClass = new MyClass();
int i = myClass.Foo();
오히려
MyClass myClass = new MyClass();
int i = Foo(myClass);
이를 통해 아래에 설명 된대로 유창한 인터페이스 를 구성 할 수 있습니다.
Scott Gu의 인용 된 블로그 게시물이 이를 잘 설명합니다.
나에게 질문에 대한 답은 그 게시물의 다음 진술에 있습니다.
위의 정적 메소드에 string 유형의 첫 번째 매개 변수 인수 앞에 "this"키워드가있는 방법에 유의하십시오. 이것은 컴파일러에게이 특정 확장 메소드가 "string"유형의 오브젝트에 추가되어야 함을 알려줍니다. IsValidEmailAddress () 메서드 구현 내에서 메서드가 호출되는 실제 문자열 인스턴스의 모든 공용 속성 / 메서드 / 이벤트에 액세스하고 유효한 전자 메일인지 여부에 따라 true / false를 반환 할 수 있습니다.
this
메소드 서명에서 키워드 의 실제 목적이 무엇인지 실제로 설명하는 유일한 대답입니다 . 다른 답변은 "확장 방법입니다." 확장 방법 이이 답변을 읽을 때까지 확장 유형에 어떻게 "첨부"되는지 완전히 이해하지 못했습니다. 감사합니다!
Preet Sangha의 설명 외에도
Intellisense는 확장 방법을 파란색 화살표로 표시합니다 (예 : "Aggregate <>"앞).
당신은 필요
using the.namespace.of.the.static.class.with.the.extension.methods;
확장 메소드가 코드를 사용하는 코드와 다른 네임 스페이스에있는 경우 확장 메소드가 나타나고 사용 가능해야합니다.