委派型別在程式撰寫上有相當多的功能,其中一種是用來呼叫動態事件,本文章透過製作一個排序應用程式來示範委派型別的用法。
前言
委派型別在程式撰寫上有相當多的功能,其中一種是用來呼叫動態事件,本文章透過製作一個排序應用程式來示範委派型別的用法。
實作
1. 建立專案
2. 設計畫面
產生XAML程式:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock FontSize="24" Height="49" Margin="10,10,0,0" Text="陣列: 33,25,48,22,90,80" TextWrapping="Wrap" Width="420" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<Button Click="btns_Click" Content="由小到大" Margin="36,223,0,0" x:Name="btns" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<Button Click="btnb_Click" Content="由大到小" Margin="261,223,0,0" x:Name="btnb" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Grid>
3. 在 MaimPage.Xaml.cs 程式碼中的事件處理函式如下:
public partial class MainPage : PhoneApplicationPage
{
delegate bool CompFunc(int a, int b);
int[] ary = { 33, 25, 48, 22, 90, 80 };
string aaa = null;
// 建構函式
public MainPage()
{
InitializeComponent();
}
bool isBigger(int a, int b) //判斷a是否大於b
{
return a > b ;
}
bool isSmaller(int a, int b) //判斷a是否小於b
{
return a < b ;
}
void Sort(int[] ary, CompFunc CompMethod)
{
for (int i = 0; i <= ary.Length - 2; i++)
{
for (int j = i + 1; j <= ary.Length - 1; j++)
{
if (CompMethod(ary[i], ary[j]))
{
int temp = ary[i];
ary[i] = ary[j];
ary[j] = temp;
}
}
}
}
void ShowAry(int[] ary)
{
for (int i = 0; i <= ary.Length - 1; i++)
aaa += ary[i] + "、";
MessageBox.Show(aaa );
}
4. 由小到大的按鈕程式
private void btns_Click(object sender, RoutedEventArgs e)
{
CompFunc compMethod;
compMethod = new CompFunc(isBigger);
Sort(ary, compMethod);
aaa = "由小到大結果:";
ShowAry(ary);
}
排序結果如下圖
5. 由大到小的按鈕程式:
private void btnb_Click(object sender, RoutedEventArgs e)
{
Sort(ary, new CompFunc(isSmaller));
aaa = "由大到小結果:";
ShowAry(ary);
}
排序結果如下圖