[C#] 일반화 델리게이트
델리게이트는 보통의 메소드뿐 아니라
일반화 메소드도 참조할 수 있다.
물론 이경우에는 델리게이트도 일반화
메소드를 참조할 수 있도록 형식 매개 변수를
이용해서 선언을 해주어야 한다.
delegate int Compare<T>(T a, T b);
그 전 포스팅에서 다루었던
오름차순 내림차순 함수를 참조하는 델리게이트와
이를 매개 변수로 받아서 정렬 방식을 결정하는
버블 소트의 예제를 일반화 버전으로 바꾸어 보겠다.
결과
일반화된 델리게이트로 수정했다.
위 부분에서 IComparable<T>를 상속받는부분이 있는데
이 부분에 대해서 좀 짚고 넘어가 보자.
System.Int32Pint), System.Double(double)을 비롯한
모든 수치 형식과 System.String(string)은 모두
IComparable을 상속해서 CompareTo() 메소드를구현하고 있다.
CompareTo() --> 자신 보다 크면 -1, 같으면 0, 작으면 1을 반환
위의 코드에서 where T : IComparable<T>는
T가 무조건 IComparable<T>를 상속하는 파생클래스여야 한다는 뜻이다.
때문에 T는 CompareTo() 라는 메소드를 쓸 수 있어야 한다.
일반화된 델리게이트에 대해 알아보았다.
형식 매개 변수 제약에 관한 내용이 잠깐 나왔는데
이 부분에 대해서는 나중에 일반화 프로그래밍을
포스팅할 때 다뤄보도록 하겠다.
'C#, 유니티' 카테고리의 다른 글
[C#] 이벤트(event) 와 델리게이트(delegate) (1) | 2017.03.08 |
---|---|
[C#] 익명 메소드 (0) | 2017.03.05 |
[C#] 델리게이트 (delegate) (0) | 2017.03.05 |
[C#] 인덱서 (Indexer) (0) | 2017.03.02 |
[C#] 상속 관계에 있는 클래스의 형변환 ( is , as ) (0) | 2017.02.21 |