C#의 확장 방법은 무엇입니까?
C #의 확장 메서드에 대한 질문을받습니다. 확장 메서드는 C# 버전 3.0에서 도입되었습니다. 기존 클래스를 수정, 확장 또는 다시 컴파일하지 않고도 기존 클래스에 기능을 추가할 수 있습니다.
C #의 확장 메서드에 대한 질문을받습니다. 확장 메서드는 C# 버전 3.0에서 도입되었습니다. 기존 클래스를 수정, 확장 또는 다시 컴파일하지 않고도 기존 클래스에 기능을 추가할 수 있습니다.
기본적으로 Extension Method를 사용하면 기존 클래스에 새 메서드를 추가할 수 있습니다.
- 수정하거나 코드를 추가하지 않고
- 확장하거나 새 파생 형식을 만들지 않고
- 클래스를 다시 컴파일하지 않고

확장 메서드는 특별한 종류의 정적 메서드이지만 인스턴스 메서드와 같은 개체에서 호출할 수 있습니다. 따라서 확장 메서드는 일반 인스턴스 메서드와 동일한 방식으로 사용할 수 있습니다.
확장 메서드를 만드는 단계
1 단계 : Extension Method 또는 Extension Methods를 포함할 static visible 클래스를 정의합니다. 클래스가 클라이언트 코드에 표시되도록 하려면 적절한 액세스 한정자를 적용합니다.
2 단계 : 포함하는 클래스와 최소한 동일한 가시성 수준을 가진 정적 메서드를 만듭니다.
3 단계 : 확장 메서드의 첫 번째 매개 변수는 항상 메서드가 작동하는 형식을 지정합니다. 형식 이름 앞에 "this" 한정자가 있는지 확인합니다.
4 단계 : 호출 코드에서 Extension Method class가 포함된 네임스페이스를 추가합니다.
5 단계 : 동일한 인스턴스 메소드의 유형에 확장 메소드를 사용할 수 있습니다. 첫 번째 매개변수는 유형을 나타내기 때문에 전달할 필요가 없지만 확장 메서드를 호출하려면 두 번째 매개변수를 계속 전달해야 합니다.
확장 메소드를 만들어 봅시다!
계속해서 String 클래스에 대한 Extension 메서드를 만들어 보겠습니다. 문자열 클래스에는 WordCount 메서드가 없습니다. 먼저 콘솔 응용 프로그램 프로젝트를 만든 다음 콘솔 응용 프로그램 프로젝트에 클래스를 추가해 보겠습니다. 클래스 이름을 StringExtension으로 지정하겠습니다.
클래스가 생성되면 앞에서 설명한 단계를 수행해야 합니다.
- 이 경우 클래스를 static 및 public으로 만듭니다.
- Add a static method
- 클래스가 공개되어 있으므로 메서드도 공개하십시오
- 정적 메서드의 첫 번째 매개 변수를 키워드 "this"가 앞에 오는 클래스의 이름으로 전달합니다.
- 기능을 구현하기 위해 메소드 내부에 코드를 작성하십시오.
namespace ExtensionMethodDemo { public static class StringExtension { public static int WordCount(this string s) { int count = 0; for (int i = 0; i < s.Length; i++) { if (s[i] != ' ') { if ((i + 1) == s.Length) { count++; } else { if (s[i + 1] == ' ') { count++; } } } } return count; } } }
위의 코드 목록에서 주어진 문자열의 단어 수를 계산하는 확장 메서드를 만들었습니다. 다음과 같은 내용을 확인할 수 있습니다.
- StringExtension 클래스는 공용 정적 클래스입니다.
- WordCount 메서드는 공용 정적 메서드입니다.
- WordCount 메서드의 첫 번째 매개 변수는 string 클래스의 확장 메서드로 WordCount를 만들기 때문에 문자열입니다.
- 첫 번째 매개 변수 형식 string 앞에는 키워드 "this"가 있습니다.
확장 메서드를 사용하기 전에 프로젝트를 컴파일해 보겠습니다. 이렇게 하려면 다음 단계를 수행해야 합니다.
- 다른 라이브러리에서 Extension Method를 만든 경우 클라이언트 프로젝트에 DLL을 추가합니다.
- using 지시문을 사용하여 Extension Method 클래스의 네임스페이스를 추가합니다.
- Extension Method를 일반 인스턴스 메소드로 사용하십시오.
아래 목록과 같이 새로 생성된 Extension Method를 사용할 수 있습니다.
using System; namespace ExtensionMethodDemo { class Program { static void Main(string[] args) { Console.WriteLine("Enter a senetence"); string inputstr = Console.ReadLine(); int numberofword = inputstr.WordCount(); Console.WriteLine(numberofword); Console.ReadKey(true); } } }
위의 목록에서 알 수 있듯이 확장 메서드 WordCount는 문장의 단어 수를 계산하는 데 사용됩니다. 또한 Visual Studio는 아래 이미지와 같이 메서드 이름 옆에 extension이라는 단어를 추가하여 intellisense에서 확장 메서드를 표시합니다.

보시다시피 인스턴스 메서드와 동일한 방식으로 Extension 메서드를 사용할 수 있습니다. 인스턴스 메소드와 동일한 이름과 서명을 가진 확장 메소드가 있는 시나리오가 있을 수 있습니다. 이 경우 always instance method가 Extension Method보다 우선합니다. 확장 메서드에 대해 염두에 두어야 할 몇 가지 중요한 사항이 있습니다.
- 인스턴스 메서드보다 우선 순위가 낮으므로 클래스에 Extension Method와 동일한 이름과 서명을 가진 Instance Method가 있는 경우 인스턴스 메서드가 우선 순위를 갖습니다.
- 확장 메서드가 대상 형식의 멤버 메서드와 충돌하는 경우 항상 확장 메서드 대신 멤버 메서드가 호출됩니다.
- 확장 메서드는 대상 형식의 private 멤버에만 액세스할 수 있습니다.
확장 메서드는 기존 클래스에 기능을 추가하는 데 매우 유용합니다. 많은 LINQ 함수가 확장 메서드로 구현됩니다. 여기에 제공된 정보가 프로젝트에 도움이 되기를 바라며 읽어 주셔서 감사합니다!