사용자 지정 확장명 메서드 구현 및 호출 방법(C# 프로그래밍 가이드)
이 문서에서는 모든 .NET 형식에 대한 사용자 고유의 확장 메서드를 구현하는 방법을 보여 줍니다. 클라이언트 코드는 확장 메서드를 사용할 수 있습니다. 클라이언트 프로젝트는 포함된 어셈블리를 참조해야 합니다. 클라이언트 프로젝트는 확장 메서드가 정의된 네임스페이스를 지정하는 using 지시문을 추가해야 합니다.
확장 메서드를 정의하고 호출하려면 다음을 수행합니다.
- 확장 메서드가 포함될 정적 클래스를 정의합니다. 클래스는 다른 형식 내에 중첩될 수 없으며 클라이언트 코드에 표시되어야 합니다. 액세스 가능성 규칙에 대한 자세한 내용은 액세스 한정자를 참조하세요.
- 최소한 포함하는 클래스와 동일한 표시 유형으로 확장 메서드를 정적 메서드로 구현합니다.
- 메서드의 첫 번째 매개 변수는 메서드가 작동하는 형식을 지정합니다. this 한정자가 앞에 와야 합니다.
- 호출 코드에
using
지시문을 추가하여 확장 메서드 클래스를 포함하는 네임스페이스를 지정합니다. - 메서드를 형식의 인스턴스 메서드로 호출합니다.
참고 항목
연산자가 적용되는 형식을 나타내기 때문에 첫 번째 매개 변수는 호출 코드에서 지정되지 않고 컴파일러가 개체 형식을 이미 알고 있습니다. 매개 변수 2 ~ n
에 대한 인수만 제공하면 됩니다.
다음 예제에서는 CustomExtensions.StringExtension
클래스에 WordCount
라는 확장 메서드를 구현합니다. 이 메서드는 첫 번째 메서드 매개 변수로 지정된 String 클래스에 대해 작동합니다. CustomExtensions
네임스페이스를 애플리케이션 네임스페이스로 가져오고, Main
메서드 내부에서 메서드가 호출됩니다.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine("Word count of s is {0}", i);
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
// This is the extension method.
// The first parameter takes the "this" modifier
// and specifies the type for which the method is defined.
public static int WordCount(this string str)
{
return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
오버로드 확인은 형식 자체에서 정의한 인스턴스 또는 정적 메서드를 확장 메서드보다 선호합니다. 확장 메서드는 확장된 클래스의 개인 데이터에 액세스할 수 없습니다.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET