Section 48.6: 메소드 chaining 을 위한 확장 메소드 사용

확장 메소드가 자신에게 주어지는 this 파라미터와 동일한 타입의 값을 반환하는 경우, 이는 호환 가능한 서명 (signature) 를 갖는 하나 이상의 다른 메소드들을 체이닝 ("chain") 하는 방식으로 사용될 수 있다. 이는 sealed 혹은 기본 (primitive) 타입의 경우에 더욱 유용하며, 메소드 이름들이 인간들의 자연 언어처럼 읽혀질 경우 흔히 말하는 "fluent" API 를 만들 수 있게된다.

void Main() { int result = 5. Increment().Decrement().Increment(); // 결과값은 이제 6 이다 } public static class IntExtensions { public static int Increment(this int number) { return ++number; } public static int Decrement(this int number) { return --number; } }

혹은 아래와 같은 예제도 작성 가능하다.

void Main() { int[] ints = new [] { 1, 2, 3, 4, 5, 6 }; int[] a = ints.WhereEven(); // a 는 { 2, 4, 6 } 값을 갖는다 int[] b = ints.WhereEven().WhereGreaterThan(2); // b { 4, 6 } 값을 갖는다 } public static class IntArrayExtensions { public static int[] WhereEven(this int[] array) { // Enumerable.* 확장 메소드는 fluent 접근 방식을 사용한다 return array.Where(i => (i % 2) == 0).ToArray(); } public static int[] WhereGreaterThan(this int[] array, int value) { return array.Where(i => i > value).ToArray(); } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts