C# 委派_學習筆記

摘要:C# 委派_學習筆記

最近學到C#的委派,雖然工作實務上還沒有真的用到,但先做個筆記以免忘記。C#委派的功能簡單來講,就是函式中可用函式代替傳入的參數。委派其他函式幫忙我完成某些事,但被委派的函式總有自己的規則與條件,我們要委派他,當然要照他的規則提供他資訊才能幫我們順利完成我要的資料。這就是我所理解的委派,用故事模式比較容易記住!

案例:實做一個BMI體脂肪的簡單小程式

需求:先判斷<性別>然後再根據<年齡>判斷<體脂肪的範圍>是否健康或肥胖,在秀出提醒訊息。

分析:傳進的參數有(性別,年齡,身高,體重)

          體脂肪的進算公式 BMI(體格指數)=體重(kg)/身高(m)2

          判定標準

 

標 準

男 性

18歲~30

30歲~69

1420

1723

女 性

18歲~30

30歲~69

1724

2027

程式撰寫,至少要用到委派的方式撰寫

1.在App_Code建立一個Class 名為BMIClass並加入委派格式,等等呼叫用

public class BMIClass
{
    public delegate string BMI(string Sex, double MyBmi, int age); //設定委派的格式
    public string GetString(string weight, string Height, string age, string sex, BMI fun)
    {
        //先把公分轉公尺:1m=100cm
        double Height_M = (Convert.ToDouble(Height) / 100);
        //BMI(體格指數)=體重(kg)/身高(m)2
        double MyBmi = Convert.ToDouble(weight) / (Height_M * Height_M);
        return fun(sex, MyBmi,  Convert.ToInt32(age));//交給委派處理,並把結果回傳
    }

}

2. 網頁中拉一些控制元件

3. Button點兩下開始寫,把表單資料傳給BMIClass.GetString()處理,而最後一個參數就是委派函式名稱。

 protected void Button1_Click(object sender, EventArgs e)
    {
        BMIClass BMIClass = new BMIClass();
        this.Label1.Text= BMIClass.GetString(this.TextBox1.Text, 
this.TextBox2.Text, this.TextBox3.Text, this.DropDownList1.SelectedValue, checkBMI);
    }

4. 自訂委派內容,但是格式要參考委派設定的規則,回傳與傳入的型別要一模一樣。

public  static string checkBMI(string Sex, double MyBmi, int age)
    {
         string Msg = "你的BMI為" + MyBmi.ToString("f0") + ",";
           switch (Sex)
           {
               case "男":
                   if (age <= 30)
                   {
                       if (MyBmi <= 20) { Msg += "你的身材很標準!"; }
                       else {Msg+="你的身材肥胖!";}
                   }
                   else
                   {
                       if (MyBmi <= 23) { Msg += "你的身材很標準!"; }
                        else { Msg += "過了30你的身材肥胖,健康危機!"; }

                   }
                   break;
               case "女":
                   if (age <= 30)
                     {
                         if (MyBmi <= 24) { Msg += "你的身材很標準!"; }
                        else { Msg += "你的身材肥胖!"; }
                   }
                   else
                   {
                       if (MyBmi <= 27) { Msg += "你的身材很標準!"; }
                         else { Msg += "過了30你的身材肥胖,健康危機!"; }

                   }
                   break;
           }
           return Msg;
        }

5.最後完成程式,測試看看

6. 結論,這樣實做委派後才對他更瞭解了,未來程式的Class都不用修改,因為公式不會改變,會改變的都是使用者自訂的文字敘述,這樣就方便多了。感覺就是把一直不可預期的變數拿出來判斷運算後再傳回去,假如未來程式越來越多這個方式因該很好用喔~