C# 3.0부터 지원하는 확장메서드(Extension Method)는 특수한 종류의 static 메서드인데,
확장메서드는 마치 다른 클래스(혹은 구조체)의 인스턴스 메서드인 것처럼 사용되는 기능을 제공한다.
확장메서드는 클래스, 구조체, 인터페이스 등에 적용될 수 있다.
일반적으로 인스턴스 메서드를 추가하기 위해서는 해당 클래스(혹은 타입) 안에 메서드를 추가한다.
하지만, 어떤 경우는 메서드를 클래스 (혹은 타입)에 직접 추가하는 것이 어려울 수도 있는데,
이러한 경우 확장메서드가 유용하게 사용될 수 있다.
확장메서드를 사용하면 클래스를 직접 변경하지 않고도, 클래스 외부에서 (확장)메서드를 정의함으로 해서
마치 그 클래스의 기능을 확장한 인스턴스 메서드를 추가한 것 같은 효과를 낼 수 있다.
확장메서드는 static class 안에 static method로 정의된다.
확장메서드는 첫번째 파라미터로 항상 클래스명(혹은 타입)을 지정하는데,
이는 그 확장메서드가 사용될 클래스 타입을 지정하는 것이다.
이를 통해 확장메서드는 마치 그 클래스의 인스턴스 메서드인 것처럼 사용할 수 있게 된다.
약간 특이한 문법이지만, 확장 메서드의 첫번째 파라미터의 클래스명 바로 앞에는 항상 this를 써준다.
아래 예제는 String 클래스에서만 동작하는 확장메서드를 정의한 예이다.
Found(this String str, char ch) 메서드는 String 클래스에서 사용되는 확장메서드로서
char 문자 하나를 입력파라미터로 받아들이는 메서드이다.
해당 메서드는 어떠한 문자열(str)안에 해당 문자(ch)가 들어가 있는지 확인을 하기 위해 만든 확장 메서드이다.