확장 메소드는 기존 Type 에 메소드를 추가할 수 있게 해준다.
예를 들어 TextBox 에 AppendText 라는 메소드가 있습니다.
TextBox 에 문자열을 추가하는 기능을 합니다.
하지만 자동으로 개행이 되는 AppendText 가 필요하다고 하면 (그냥 NewLine 을 붙여도 되겠지만....)
TextBox 를 상속받아서 AppendText 메소드를 추가해야 한다.
1 | void AppendText(string textData, bool IsNewLine) | cs |
그렇게 되면 상속받아서 만든 TextBox 의 인스턴스에서만 사용이 가능하며
예시처럼 컨트롤이라면 디자인에 올라간 컨트롤도 교체를 해야한다.
하지만 확장 메소드를 이용하면 쉽게 해결이 가능하다.
1 2 3 4 5 6 7 | public static class TextBoxExtension { public static void AppendText(this System.Windows.Controls.TextBox ctrl, string textData, bool IsNewLine) { ctrl.AppendText(textData + (IsNewLine ? Environment.NewLine : string.Empty)); } } | cs |
이렇게 static 메소드로 첫번째 파라매터에 this 로 확장할 Type 을 매개변수로 넘겨줘서 메소드를 만들면 된다.
static 메소드지만 사용할 때는 생성한 인스턴스의 매소드 처럼 사용된다.
이렇게 기존 Type 을 손대지 않고 쉽게 새로운 메소드를 추가 할 수 있다.
분명 구현할 때 제약이나 한계가 상속받은거에 비하여 심하겠지만...그래도 심플한 기능에 대해서는 유용할 듯 하며
Linq 에서는 확장 메소드가 유용하게 쓰이고 있기 때문에(이건 나중에 다시...) 알아두면 반드시 도움이 될 것이다.
단, MSDN 에서는
"일반적으로 반드시 필요한 경우에만 드물게 확장 메서드를 구현하는 것이 좋습니다."
라는 문구가 있다....남발하지는 말자.
MSDN : http://msdn.microsoft.com/ko-kr/library/bb383977.aspx
'Dev::DotNet > C#' 카테고리의 다른 글
Service Project 를 쉽게 디버깅하기 (0) | 2017.01.02 |
---|---|
new 한정자(new Modifier) (0) | 2013.12.23 |
DLL 레지스트리 등록 API (1) | 2013.11.14 |
Google gmail 로 메일 보내기 - c#, smtp (0) | 2013.10.31 |
마우스 이동에 따른 화면 이동 (0) | 2013.10.29 |