다음과 같은 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를 반환 할 수 있습니다.
답변
Preet Sangha의 설명 외에도
Intellisense는 확장 방법을 파란색 화살표로 표시합니다 (예 : “Aggregate <>”앞).
당신은 필요
using the.namespace.of.the.static.class.with.the.extension.methods;
확장 메소드가 코드를 사용하는 코드와 다른 네임 스페이스에있는 경우 확장 메소드가 나타나고 사용 가능해야합니다.
답변
답변
나는 다른 날에 이것을 스스로 배웠습니다. this 키워드는 메소드가 클래스를 확장하는 것을 정의합니다. 예를 들어 MyClass에는 Foo라는 새로운 확장 메서드가 있습니다.이 메서드는 매개 변수를 허용하지 않고 int를 반환하며 다른 공용 메서드와 마찬가지로 사용할 수 있습니다.
답변
“this”는 매개 변수 목록에서 다음 클래스를 확장합니다
따라서 아래의 메소드 서명에서 “this”는 “String”을 확장합니다. 라인은 메소드의 일반적인 인수로 함수에 전달됩니다. 공개 정적 문자열 [] SplitCsvLine (이 문자열 줄)
위 예제에서 “this”클래스는 내장 “String”클래스를 확장합니다.