다음을 통해 공유


사용자 지정 확장명 메서드 구현 및 호출 방법(C# 프로그래밍 가이드)

이 문서에서는 모든 .NET 형식에 대한 사용자 고유의 확장 메서드를 구현하는 방법을 보여 줍니다. 클라이언트 코드는 확장 메서드를 사용할 수 있습니다. 클라이언트 프로젝트는 포함된 어셈블리를 참조해야 합니다. 클라이언트 프로젝트는 확장 메서드가 정의된 네임스페이스를 지정하는 using 지시문을 추가해야 합니다.

확장 메서드를 정의하고 호출하려면 다음을 수행합니다.

  1. 확장 메서드가 포함될 정적 클래스를 정의합니다. 클래스는 다른 형식 내에 중첩될 수 없으며 클라이언트 코드에 표시되어야 합니다. 액세스 가능성 규칙에 대한 자세한 내용은 액세스 한정자를 참조하세요.
  2. 최소한 포함하는 클래스와 동일한 표시 유형으로 확장 메서드를 정적 메서드로 구현합니다.
  3. 메서드의 첫 번째 매개 변수는 메서드가 작동하는 형식을 지정합니다. this 한정자가 앞에 와야 합니다.
  4. 호출 코드에 using 지시문을 추가하여 확장 메서드 클래스를 포함하는 네임스페이스를 지정합니다.
  5. 메서드를 형식의 인스턴스 메서드로 호출합니다.

참고 항목

연산자가 적용되는 형식을 나타내기 때문에 첫 번째 매개 변수는 호출 코드에서 지정되지 않고 컴파일러가 개체 형식을 이미 알고 있습니다. 매개 변수 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;
        }
    }
}

오버로드 확인은 형식 자체에서 정의한 인스턴스 또는 정적 메서드를 확장 메서드보다 선호합니다. 확장 메서드는 확장된 클래스의 개인 데이터에 액세스할 수 없습니다.

참고 항목