C #의 정적 메소드에 대한 공식 매개 변수에서 “this”키워드 사용 C # 코드의 여러 인스턴스를

다음과 같은 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”클래스를 확장합니다.