摘要:C# 委派_學習筆記
最近學到C#的委派,雖然工作實務上還沒有真的用到,但先做個筆記以免忘記。C#委派的功能簡單來講,就是函式中可用函式代替傳入的參數。委派其他函式幫忙我完成某些事,但被委派的函式總有自己的規則與條件,我們要委派他,當然要照他的規則提供他資訊才能幫我們順利完成我要的資料。這就是我所理解的委派,用故事模式比較容易記住!
案例:實做一個BMI體脂肪的簡單小程式
需求:先判斷<性別>然後再根據<年齡>判斷<體脂肪的範圍>是否健康或肥胖,在秀出提醒訊息。
分析:傳進的參數有(性別,年齡,身高,體重)
體脂肪的進算公式 BMI(體格指數)=體重(kg)/身高(m)2
判定標準
標 準 |
||
男 性 |
18歲~30歲 |
30歲~69歲 |
14~20﹪ |
17~23﹪ |
|
女 性 |
18歲~30歲 |
30歲~69歲 |
17~24﹪ |
20~27﹪ |
程式撰寫,至少要用到委派的方式撰寫
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都不用修改,因為公式不會改變,會改變的都是使用者自訂的文字敘述,這樣就方便多了。感覺就是把一直不可預期的變數拿出來判斷運算後再傳回去,假如未來程式越來越多這個方式因該很好用喔~