[Windows Phone] 委派型別(Delegate)

委派型別在程式撰寫上有相當多的功能,其中一種是用來呼叫動態事件,本文章透過製作一個排序應用程式來示範委派型別的用法。

前言

委派型別在程式撰寫上有相當多的功能,其中一種是用來呼叫動態事件,本文章透過製作一個排序應用程式來示範委派型別的用法。

 

實作

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);
        }

排序結果如下圖

 

相關參考與引用

事件和委派