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/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
48.8: 정적 (static) 타입에 기반한 확장 메소드 호출 (0) | 2022.10.21 |
---|---|
48.7: 열거형 (Enumeration) 과 확장 메소드 (0) | 2022.09.22 |
48.5: 확장 메소드의 접근 가능 범위: public (혹은 internal) 멤버들 (0) | 2022.09.21 |
48.4: Generic 확장 메소드 (1) | 2022.09.21 |
48.3: 확장 메소드를 명시적으로 (explicitly) 사용하기 (1) | 2022.09.21 |