Section 48.4: Generic 확장 메소드
다른 메소드들과 마찬가지로, 확장 메소드 역시 generic 을 사용할 수 있다. 다음 예제를 확인한다:
static class Extensions
{
public static bool HasMoreThanThreeElements<T>(this IEnumerable<T> enumerable)
{
return enumerable.Take(4).Count() > 3;
}
}
이는 다음과 같이 호출할 수 있다:
IEnumerable<int> numbers = new List<int> {1,2,3,4,5,6};
var hasMoreThanThreeElements = numbers.HasMoreThanThreeElements();
마찬가지로, 복수개의 Type Argument 를 갖는 경우는 다음과 같이 작성할 수 있다:
public static TU GenericExt<T, TU>(this T obj)
{
TU ret = default(TU);
// obj 에 대한 작업을 수행한다
return ret;
}
이는 다음과 같이 호출할 수 있다:
IEnumerable<int> numbers = new List<int> {1,2,3,4,5,6};
var result = numbers.GenericExt<IEnumerable<int>,String>();
다중 generic 타입 중에서 일부만이 bind 된 타입에 대해서도 마찬가지로 확장 메소드를 만들 수 있다:
class MyType<T1, T2>
{
}
static class Extensions
{
public static void Example<T>(this MyType<int, T> test)
{
}
}
호출은 다음과 같이 할 수 있다:
MyType<int, string> t = new MyType<int, string>();
t.Example();
where
문을 통한 타입 제약 조건을 명시하는 것 또한 가능하다:
public static bool IsDefault<T>(this T obj) where T : struct, IEquatable<T>
{
return EqualityComparer<T>.Default.Equals(obj, default(T));
}
호출 코드:
int number = 5;
var IsDefault = number.IsDefault();
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
'번역 > C# Notes for Professionals' 카테고리의 다른 글
48.6: 메소드 chaining 을 위한 확장 메소드 사용 (1) | 2022.09.22 |
---|---|
48.5: 확장 메소드의 접근 가능 범위: public (혹은 internal) 멤버들 (0) | 2022.09.21 |
48.3: 확장 메소드를 명시적으로 (explicitly) 사용하기 (1) | 2022.09.21 |
48.2: Null 인지 확인하기 (0) | 2022.09.21 |
48.1: 확장 (Extension) 메소드의 개요 (0) | 2022.09.21 |