C #에서 확장 메서드를 사용하는 방법

C # 프로그래밍 언어는 C # 3.0의 확장 메서드를 지원합니다. 확장 메서드는 새 파생 형식을 만들 필요없이 메서드를 추가하여 기존 형식의 기능을 확장하는 데 사용되는 메서드입니다. 확장 메서드를 사용하기 위해 기존 클래스의 하위 클래스를 만들거나 기존 클래스를 다시 컴파일하거나 수정할 필요가 없습니다. 확장 메서드는 코드의 가독성을 향상시키는 동시에 기존 유형의 기능을 확장 할 수 있도록합니다.

.Net의 일반적인 확장 메서드에는 System.Collections.IEnumerable and System.Collections.Generic.IEnumerable형식에 추가 쿼리 기능을 추가하는 LINQ 표준 쿼리 연산자가 포함 됩니다. 확장 메서드를 이용하여 클래스 또는 인터페이스를 확장 할 수 있지만 해당 메서드를 재정의 할 수는 없습니다. MSDN에서는 "확장 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를"추가 "할 수 있습니다. 확장 메서드는 특수한 종류의 정적 메서드이지만 마치 호출되는 것처럼 호출됩니다. 확장 유형의 인스턴스 메소드였습니다. "

기본적으로 확장 메서드는 정적 메서드의 특수 유형이며 해당 유형의 소스 코드에 대한 액세스 권한이없는 경우에도 기존 유형에 기능을 추가 할 수 있습니다. 확장 메서드는 다른 정적 메서드와 비슷하지만 첫 번째 매개 변수로 "this"참조가 있습니다. 모든 유형에 원하는만큼 확장 메소드를 추가 할 수 있습니다. 가장 중요한 것은 값 유형에도 확장 메서드를 추가 할 수 있다는 것입니다.

확장 메서드로 작업 할 때 다음 사항에 유의하십시오.

  • 확장 메서드는 정적 메서드 여야합니다.
  • 확장 메서드는 정적 클래스 내에 있어야합니다. 클래스는 모든 이름을 가질 수 있습니다.
  • 확장 메서드의 매개 변수에는 메서드를 호출해야하는 유형 앞에 항상 "this"키워드가 있어야합니다.

확장하는 형식의 다른 메서드와 동일한 서명이있는 형식에 확장 메서드를 정의하면 확장 메서드가 호출되지 않습니다.

C #의 프로그래밍 확장 메서드

이 섹션에서는 C #을 사용하여 확장 메서드를 프로그래밍하는 방법을 살펴 봅니다. 다음 코드 목록은 확장 메서드의 모양을 보여줍니다.

public static class StringExtensions

    {

        public static bool IsNumeric(this string str)

        {

            double output;

            return double.TryParse(str, out output);

        }

    }

확장 방법에 대한 첫 번째 매개 변수에 유의하십시오. 이미 설명했듯이 모든 확장 메서드는 정적이어야하며 메서드를 호출 할 매개 변수 앞에 "this"키워드가 있어야합니다. 위의 예에 표시된 방식대로 매개 변수 목록에 "this"키워드를 지정하면 컴파일러에 문자열 클래스에 대해 확장 메서드가 정의되었음을 알립니다.

다음은 문자열 인스턴스에서 확장 메서드 IsNumeric을 사용하는 방법입니다.

static void Main(string[] args)

        {

            string str = "100";

            if (str.IsNumeric())

                Console.WriteLine("The string object named str contains numeric value.");

            Console.Read();

        }

위의 프로그램을 실행하면 콘솔 창에 "str이라는 문자열 객체에 숫자 값이 있습니다."라는 메시지가 표시됩니다.

확장 메서드를 사용하여 원본 형식을 수정, 파생 또는 다시 컴파일 할 필요없이 메서드를 통해 형식에 새 기능을 삽입 할 수 있습니다. 앞서 언급했듯이 확장 메서드는 값 형식에도 적용 할 수 있습니다. 예를 들어 이것이 어떻게 달성 될 수 있는지 봅시다.

IntegerExtensions라는 다음 클래스에는 호출되는 정수가 짝수이면 true를 반환하고 그렇지 않으면 false를 반환하는 IsEven이라는 확장 메서드가 포함되어 있습니다.

public static class IntegerExtensions

    {

        public static bool IsEven(this int i)

        {

            return ((i % 2) == 0);

        }

    }

그리고 정수에서 확장 메서드 IsEven을 사용하는 방법은 다음과 같습니다.

int n = 2;

if(n.IsEven())

 Console.WriteLine("The value of the integer is even.");