C# 확장 메서드

.Net

기존 클래스에서 상속받아 클래스를 만들거나 기존 클래스를 변경하여 다시 컴파일하지 않고 새로운 기능을 추가할 수 있습니다.

확장 메서드를 구현한 클래스가 같은 네임스페이스에 있어야할 필요는 없습니다. 다른 어셈블리에 존재하더라도 사용할 수 있습니다.

public static class ExtendClass
{
    public static string GetString(this object obj)
    {
        return String.Format("{0}", obj);
    }

    public static int? GetInt(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return null;
        }
        else
        {
            int intValue = 0;
            if (int.TryParse(str, out intValue))
            {
                return intValue;
            }
            else
            {
                return null;
            }

        }
    }
}
확장 메서드의 사용
Visual Studio 에서 확장메서드의 사용

콘솔응용프로그램 프로젝트를 만들고 아래와 같이 테스트 코드를 작성하였습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestExtensionMethods
{
    class Program
    {
        static void Main(string[] args)
        {
            object obj = null;
            string str = null;
            try
            {
                Console.WriteLine("obj.ToString() : " + obj.ToString());  // 오류
            }
            catch(Exception ex)
            {
                Console.WriteLine("obj.ToString() : " + ex.Message);
            }

            try
            {
                Console.WriteLine("obj.GetString() : " + obj.GetString()); // 정상
            }
            catch (Exception ex)
            {
                Console.WriteLine("obj.GetString()" + ex.Message);
            }

            str = null;
            int? n1 = str.GetInt();
            Console.WriteLine("str.GetInt() 의 결과 [{0:n0}]", n1);    // n1 == null

            str = "1";
            n1 = str.GetInt();
            Console.WriteLine("str.GetInt() 의 결과 [{0:n0}]", n1);    // n1 == 1

            Console.ReadLine();
        }
    }

    public static class ExtendClass
    {
        // object 확장 메서드
        public static string GetString(this object obj)
        {
            return String.Format("{0}", obj);
        }
        // string 확장 메서드
        public static int? GetInt(this string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return null;
            }
            else
            {
                int intValue = 0;
                if (int.TryParse(str, out intValue))
                {
                    return intValue;
                }
                else
                {
                    return null;
                }

            }
        }
    }
}

참조

MSDN: 확장 메서드