[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() 라는 메소드를 쓸 수 있어야 한다.




일반화된 델리게이트에 대해 알아보았다.

형식 매개 변수 제약에 관한 내용이 잠깐 나왔는데

이 부분에 대해서는 나중에 일반화 프로그래밍을

포스팅할 때 다뤄보도록 하겠다.




+ Recent posts