2012-09-15 3 views

답변

3

EXTENSION METHOD (EM)입니다.

확장 방법은 새로운 파생 된 유형을 만들어 다시 컴파일하거나 원래 형식을 수정하지 않고 기존의 유형과 방법을 "추가"할 수 있습니다. 확장 메서드는 특별한 종류의 정적 메서드이지만 확장 된 형식의 인스턴스 메서드 인 것처럼 호출됩니다. C# 및 Visual Basic으로 작성된 클라이언트 코드의 경우 확장 메서드를 호출하는 것과 형식에 실제로 정의 된 메서드간에 명백한 차이가 없습니다. 예를 들어

:
문자열은 닷넷 유형입니다. EM이 나오기 전에 파생되지 않으면 자신의 메서드를 문자열 유형에 추가 할 수 없습니다. 파생에 의해 그렇게했다하더라도,이 메서드는 문자열 형식이 아닌 파생 형식의 메서드로 계산됩니다.

하지만 이제 EM에서 파생되지 않고 EM을 사용할 수 있습니다. (C#에서) EM의

요구 사항

  1. 그들은
  2. 가 정의 된 클래스는 또한 공공 및 정적 공공 및 정적해야합니다.
  3. 중요 사항 : 첫 번째 매개 변수는 EM을 작성하는 유형이어야하며 그 앞에 this 키워드가 있어야합니다. 그것 없이는, 당신의 방법은 EM이 아니며 정적 방법 일뿐입니다.당신의 EM NthIndexOf scenaro하여 이전에

는 당신이

int result = "My string".NthIndexOf("M", 0); 

하는 경우로 호출 할 수 있도록 첫 번째 매개 변수는 문자열의 앞에이 포함되어 있으므로 StringExtender

public static class StringExtender 
{ 
    public static int NthIndexOf(this string target, string value, int n) 
    { 
     .... 
    } 
} 

이제 정적 클래스에 정의되어 있습니다 EM이 아니고 평범한 정적 방법이었습니다.

다음은 자세한 답변을

int result = NthIndexOf("My string", "M", 0); 
+0

감사처럼 호출했다. – GoBeavs

+0

@OsuBrenden : 언제나 기쁩니다. –

5

는 그것은 extension method (MSDN)이기 때문에 - 첫 번째 매개 변수 전에 키워드 this을 알 수 있습니다. 당신이 System.String 유형으로 NthIndexOf 방법을 추가했다 것처럼 ...

var result = "foo bar".NthIndexOf("o", 1); 

:

이것은 당신이 구문을 사용할 수 있습니다. 이것은 해당 정적 클래스의 네임 스페이스가 사용 가능한 곳이면 어디에서나 사용할 수 있습니다 (예 : using MyExtensions;).

확장 메서드는 public, 중첩되지 않은 정적 클래스의 정적 메서드로 선언해야하지만 같은 논리를 확장 메서드를 사용하지 않고 캡슐화 할 수 있습니다.이 경우 정적 클래스 & 메서드를 사용할 필요가 없습니다.

관련 문제