using System;
delegate int SortCompare(int a, int b);
class MainApp
{
static void BubbleSort(int[] DataArray, SortCompare sortCompare)
{
int i=0;
int j=0;
int temp = 0;
for ( i = 0; i< DataArray.Length -1; i++)
{
for( j =0; j<DataArray.Lenth - ( i + 1); j++)
if( sortCompare(DataArray[j], DataArray[ j + 1] > 0 )
{
temp = DataArray[ j + 1 ];
DataArray[ j + 1 ] = DataArray[ j ];
DataArray[ j ] = temp;
}
}
}
}
static void Main(string[] args)
{
int[] array = { 2,5,3,4,10};
BubbleSort( array, delete( int a, int b)
{
if( a>b)
return 1;
else if( a== b)
return 0;
else
return -1;
});
}
}
_______________________________________________________________________________
* 한정자 delegate 반환형식 델리게이트이름 ( 매개변수 );
delegate int MeDelgate( int a, int b);
델리게이트는 메소드를 참조하며 값이 아닌 코드를 매개변수로 넘기고 싶을때 사용합니다.
델리게이트로 참조할 메서드는 델리게이트에 선언된 반환형식과 매개변수가 같아야 합니다.
위의 코드에서 Main메서드에서
BubbleSort( array, delete( int a, int b)
{
if( a>b)
return 1;
else if( a== b)
return 0;
else
return -1;
});
}
을 호출하면 BubbleSort 메서드가 호출됩니다.
ⓐ BubbleSort 메서드는 메서드 인자로 배열 과 델리게이트 를 받고 있습니다. (위의 델리게이트의 반환값가 메서드인자가 일치합니다.)
BubbleSort 를 호출하면 BubbleSort 메서드안의 델리게이트가 실행됩니다.
if( SortCompare(DataArray[j], DataArray[ j + 1] > 0 ) // 델리게이트
{
temp = DataArray[ j + 1 ];
DataArray[ j + 1 ] = DataArray[ j ];
DataArray[ j ] = temp;
}
ⓑ 위의 코드중 SortCompare( DataArray[j], DataArray[ j + 1] ) 이 구문이 실행 될때
delete( int a, int b)
{
if( a>b)
return 1;
else if( a== b)
return 0;
else
return -1;
});
위의 델리게이트가 참조하고 있는 메서드가 실행되어
리턴값으로 1,0,-1 을 줍니다.
ⓒ if 문은 리턴값이 0보다 클경우
temp = DataArray[ j + 1 ];
DataArray[ j + 1 ] = DataArray[ j ];
DataArray[ j ] = temp;
이 구문을 실행하여 오름차순 배열로 정렬해 줍니다.