Unity3d C# toolba 사용해보기

C# 델리게이트 일반화를 알아봅니다. (GenericDelegate)

안녕하세요 메르세데스입니다. delegate계속 이어서 진행하도록 하겠습니다. 이번시간에 알아볼 것은 델리게이트의 일반화(Generic)
입니다.

전시간에 일반화에 대해 알아봤었는데요.. 역시 마찬가지로 delegate도 적용이됩니다. 문법도 비슷합니다.

그기존문법은.. 하려고하였을때 < > 꺾쇄안에 치환문자를 넣어주는걸 뒤에 선언하는것으로 하였는데 마찬가지입니다.

delegate int NAME<T>(T a, T b ); <-- <T> 이렇게 치환문자를 넣어주고 매개변수에도 적용해주었습니다. 똑같네요..

이 델리게이트를 매개변수로 받는 메소드를 만들었다면.. 형식 맞춰 변경해야되겠죠?

static void SSort ( int[] Dataset, Compre Compare)      //이것을 형식에 맞게 변경을 해야합니다. delegate가 일반화되어있어서..

static void SSort<T>(T[] Dataset, Compare<T> Compare)    //이렇게 하면 될 것 같네요..

기존의 소스를 조금 수정해서 맞춰서.. 해보면..

아래와 같은 결과를 얻으실 수 있습니다.

C# delegate 일반화



근데 살펴보니 소트를 하는 메소드가 좀 다르네요...?
static int AscendCompare<T>(T a, T b) where T: IComparable<T>
{
     return a.CompareTo(b);
}

이건 또.. 어디서 나온건지..;;      where T 이렇게되어있는건 지난시간에 했었던 일반화의 제약조건에 해당하는것 같습니다. 참조를 해야하는 제약조건이 있다는건 알겠는데.. 뒤에 나온.. IComparable<T> 무엇인지 모르겠네요.. 이해하려고하니 복잡하기만합니다.
그냥 비교기능을 좀 더 단순하게 하기위해서 제공해주는 거라고 생각하는게 낫겠네요..  

결론적으로는..  return 도 좀 이해가 안되기는하지만..  a와 b를 비교해서 a가크면.. 1 둘이같으면 0 b가 크면 -1을 반환한다고 보시면되겠습니다.    전시간에 조건문을 2개 걸어서 결과를 내놓은것을 소스1줄로 간단하게 하는 방법인거죠.. 자주보고 찾아보는 수 밖에는.. 아니면 그냥 전처럼 하셔도됩니다.. 

네..  좀만 연습하면.. 사용하면 괜찮을 것 같습니다.

이상으로 델리게이트의 일반화(GenericDelegate)에 대해 알아봤습니다.










댓글