C#에서는 확장 방법 개념을 사용하면 원본 유형의 소스 코드를 수정하지 않고도 기존 클래스나 구조에 새 메서드를 추가할 수 있으며 원본 유형에서 특별한 권한이 필요하지 않으며 원본 유형을 다시 컴파일할 필요도 없습니다. . 에 소개되어 있습니다. C#3.0 .
예제를 통해 이 개념을 논의해 보겠습니다. 세 가지 메소드를 포함하는 클래스 또는 구조가 있고 이 클래스 또는 구조에 두 개의 새로운 메소드를 추가하려고 하며, 클래스/구조의 소스 코드가 없거나 클래스/구조에 대한 권한이 없다고 가정하십시오. 클래스는 봉인된 클래스이지만 여전히 새 메서드를 추가하려는 경우 개념 확장 메서드를 사용하여 기존 클래스/구조에 새 메서드를 추가할 수 있습니다.
자바스크립트 하위 문자열 자르기
이제 기존 클래스에 추가하려는 두 가지 메서드를 포함하는 정적인 새 클래스를 만들고, 이제 이 클래스를 기존 클래스와 바인딩합니다. 바인딩 후에는 기존 클래스가 새로 추가된 두 메서드에 액세스할 수 있음을 확인할 수 있습니다. 아래 프로그램에 표시된 것처럼.

예:
먼저 다음과 같은 클래스를 만듭니다. 괴짜 ~에 Program1.cs 파일. 여기에는 세 가지 방법이 포함되어 있습니다. M1() , M2() , 그리고 M3() .
씨# // C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // Here Geek class contains three methods // Now we want to add two more new methods in it // Without re-compiling this class class Geek { // Method 1 public void M1() { Console.WriteLine("Method Name: M1"); } // Method 2 public void M2() { Console.WriteLine("Method Name: M2"); } // Method 3 public void M3() { Console.WriteLine("Method Name: M3"); } } }> 이제 NewMethodClass라는 이름의 정적 클래스를 만듭니다. Program2.cs 파일. 여기에는 두 가지 방법이 포함되어 있습니다. M4() 그리고 M5() . 이제 우리는 이러한 메소드를 괴짜 클래스이므로 우리는 바인딩 매개변수 이러한 메소드를 Geek 클래스와 바인딩합니다. 그런 다음 Geek 클래스가 다섯 가지 메서드 모두에 액세스하는 GFG라는 또 다른 이름을 만듭니다.>
// C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // This class contains M4 and M5 method // Which we want to add in Geek class. // NewMethodClass is a static class static class NewMethodClass { // Method 4 public static void M4(this Geek g) { Console.WriteLine("Method Name: M4"); } // Method 5 public static void M5(this Geek g, string str) { Console.WriteLine(str); } } // Now we create a new class in which // Geek class access all the five methods public class GFG { // Main Method public static void Main(string[] args) { Geek g = new Geek(); g.M1(); g.M2(); g.M3(); g.M4(); g.M5("Method Name: M5"); } } }> 산출:
Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>
중요한 사항:
- 여기, 바인딩 매개변수 새 메소드를 기존 클래스 또는 구조와 바인딩하는 데 사용되는 매개변수입니다. 다른 용도가 아닌 바인딩에만 사용되므로 확장 메서드를 호출할 때 어떤 값도 사용하지 않습니다. 확장 메서드의 매개변수 목록에서 바인딩 매개변수는 첫 번째 위치가 아닌 두 번째, 세 번째 또는 다른 위치에 바인딩 매개변수를 쓰는 경우 항상 첫 번째 위치에 존재하며 컴파일러에서 오류가 발생합니다. 바인딩 매개변수는 이 키워드 뒤에 새 메서드를 추가하려는 클래스 이름과 매개변수 이름을 사용하여 생성됩니다. 예를 들어:
this Geek g>
여기, 이것 키워드는 바인딩에 사용됩니다. 괴짜 바인딩하려는 클래스 이름입니다. g 매개변수 이름입니다. - 확장 메서드는 항상 정적 메서드로 정의되지만 클래스나 구조와 바인딩되면 비정적 메서드로 변환됩니다.
- 확장 메서드가 기존 메서드와 동일한 이름과 시그니처로 정의되면 컴파일러는 확장 메서드가 아닌 기존 메서드를 인쇄합니다. 즉, 확장 방법은 지원하지 않습니다. 메서드 재정의 .
- 또한 봉인된 수업 또한 확장 방법 개념을 사용합니다.
- 필드에는 적용할 수 없습니다. 속성 , 또는 이벤트.
- 최상위 정적 클래스에서 정의되어야 합니다.
- 여러 바인딩 매개변수가 허용되지 않는다는 것은 확장 메서드에 단일 바인딩 매개변수만 포함된다는 의미입니다. 그러나 확장 메서드에서 하나 이상의 일반 매개변수를 정의할 수 있습니다.
장점:
- 확장 메소드의 가장 큰 장점은 별도의 메소드를 사용하지 않고 기존 클래스에 새로운 메소드를 추가한다는 것입니다. 계승 .
- 기존 클래스의 소스 코드를 수정하지 않고도 기존 클래스에 새 메서드를 추가할 수 있습니다.
- 그것은 또한 함께 작동할 수 있습니다 봉인된 수업 .