C # 3.0의 새로운 기능인 확장 메서드를 선언하는 구문입니다.
확장 메서드는 부분 코드, 부분 컴파일러 "마법"으로, Visual Studio의 인텔리 젠스를 사용하여 컴파일러가 실제로 해당 개체의 인스턴스 메서드로 확장 메서드를 사용할 수 있음을 나타냅니다.
예를 들어 보겠습니다.
GobbleGobble이라는 String 클래스에는 메서드가 없으므로 확장 메서드를 만들어 보겠습니다.
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
클래스 이름은 내 명명 규칙 일뿐입니다. 그렇게 이름을 지정할 필요는 없지만 메서드와 마찬가지로 정적이어야합니다.
위의 메서드를 선언 한 후 Visual Studio에서 다음을 입력 할 수 있습니다.
String s = "Turkey Baster!";
s.
점 다음에 intellisense를 기다렸다가 GobbleGobble 메소드가 있는지 확인하고 다음과 같이 코드를 완성합니다.
String s = "Turkey Baster!";
s.GobbleGobble();
중요 : intellisense가 메서드를 표시하려면 확장 메서드가 선언 된 클래스가 컴파일러 및 intellisense 프로세서에서 사용 가능해야합니다. GobbleGobble을 수동으로 입력하고 Ctrl+ .단축키를 사용하면 올바른 using 지시문을 파일로 가져 오는 데 도움이되지 않습니다.
메소드에 대한 매개 변수가 사라졌습니다. 컴파일러는 다음과 같은 중요한 부분을 조용히 이동합니다.
String s = "Turkey Baster!";
s.GobbleGobble();
^ ^
| +-- the compiler will find this in the StringExtensions class
|
+-- will be used as the first parameter to the method
따라서 위의 코드는 컴파일러에 의해 다음과 같이 변환됩니다.
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
따라서 호출 시간에는 마법 같은 것이 없으며 정적 메서드에 대한 호출 일뿐입니다.
확장 메소드가 둘 이상의 매개 변수를 선언하는 경우 첫 번째 매개 변수 만 this
수정자를 지원 하고 나머지는 정상적으로 메소드 호출의 일부로 지정되어야합니다.
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
확장 메서드는 Linq로 인해 부분적으로 추가되었습니다. 여기서 C #의 Linq 구문은 실행중인 개체에 대해 적절하게 명명 된 확장 메서드를 찾습니다. 즉, 올바른 확장을 선언하여 모든 유형의 클래스에 Linq 지원을 "소개"할 수 있습니다. 행동 양식. 물론 전체 Linq 지원은 많은 작업이지만 가능합니다.
또한 확장 방법 자체가 정말 유용하므로 읽어보십시오.
다음은 몇 가지 링크입니다.