프로그래밍/C#

[C#] 확장 메서드 (Extension Method)

Victory_HA 2021. 10. 19. 22:58

확장 메서드

  • 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 "추가"할 수 있습니다. 확장 메서드는 정적 메서드이지만 확장 형식의 인스턴스 메서드인 것처럼 호출됩니다.
  • 이제 int, string 형 변수에서 사용할 수 있는 IsEven(), Dash() 확장 메서드를 선언해봅시다.

확장 메서드 정의하기

  • 우선 확장메서드를 작성하기에 앞서 조건이 크게 3가지가 존재합니다.
  • 첫째. 확장메서드를 가지는 클래스는 Static 이어야 합니다.
  • 둘째, 확장메서드는 Static 이어야 합니다.
  • 셋째, 확장메서드의 첫번째 매개변수는 this지시어를 붙여야합니다.
    • 즉 예제에서, int타입의 변수에 IsEven이라는 메서드를 추가해서 사용하겠다는 것을 의미합니다.
    • 확장 메서드 Dash의 경우는 string타입의 변수에 Dash라는 메서드를 추가하여 사용하겠다는 것을 의미합니다.
  • int형 변수가 IsEven메서드를 사용하는 경우 매개변수를 넣지 않아도 사용할 수 있습니다.
    • 예제에서 a의 값 '2'가 IsEven()의 1번째 매개변수로 대입되어 사용됩니다.
  • string형 변수가 Dash메서드를 사용하는 경우 1번째 매개변수는 넣지 않고, 2번째 매개변수를 넣어야 사용 할 수 있습니다.
    • 예제에서 s의 값 'aaa'가 Dash()의 1번째 매개변수로 대입되어 사용됩니다.

확장메서드 예제

// 확장메서드 정의
public static class MyExtension
{
    public static bool IsEven(this int a)
    {
        return a % 2 == 0;
    }

    public static string Dash(this string s , string txt)
    {
        return s + txt;
    }
}
// Main에서 int형 변수의 확장메서드 사용
static void Main(string[] args)
{
    int a = 2;
    bool b = a.IsEven();    // b == true;
    b = 3.IsEven();            // b == false;

    string s = "aaa";
    string t = s.Dash("bbb");
    Console.WriteLine(t);    // 출력 : aaabbb 
}

'프로그래밍 > C#' 카테고리의 다른 글

[C#] CSV 파일 생성 및 쓰기  (0) 2021.12.01
[C#] Linq - Enumerable.Aggregate  (0) 2021.10.23
[C#] 대리자 (delegate)  (0) 2021.09.26
[C#] 리플렉션 (Reflection)  (0) 2021.09.12
[C#] DateTime.Ticks 속성 변환하기  (0) 2021.07.29