C#方法重載
阿新 • • 發佈:2018-05-12
font 例如 oid 怎麽 code alt 不同 info 重載
一、 描述
在面向對象的語言中,允許我們在同一個類中定義多個方法名相同、參數列表(參數類型,參數個數)不同的方法,這樣的形式我們稱為方法重載。調用時編譯器會根據實際傳入參數的形式,選擇與其匹配的方法執行。
二、 重載的分析
1.生活中的方法重載
2.將生活重載的表現形式,抽象成代碼的形式:
3.構成方法重載的條件
a方法名相同。
b.方法參數類型不同或者參數個數不同。
c.在同一個類中。
三、 重載示例
1.我們實現一個薪水計算類,用重載的方法實現項目經理和程序員的薪水計算
1 class ComSalary 2 { 3 4 //項目經理的薪水計算:薪水=基礎工資+項目獎金+分紅 5 public static int Pay(PM pm) 6 { 7 return pm.BasePay + pm.MeritPay + pm.Bonus; 8 } 9 10 //程序員的薪水計算:薪水=基礎工資+項目獎金 11 public static int Pay(SE se) 12 { 13 return se.BasePay + se.MeritPay; 14 }15 16 } 17 18 static void Main(string[] args) 19 { 20 21 //實例化一個程序員對象 22 SE tom = new SE { Id="998", Name="湯姆", BasePay=6000, MeritPay=1000}; 23 24 //實例化一個項目經理對象 25 PM jack = new PM { Id = "110", Name = "傑克", BasePay = 9000, MeritPay = 2000, Bonus=1500};26 27 //計算工資 28 Console.WriteLine("程序員的薪水:"+ComSalary.Pay(tom)); 29 Console.WriteLine("項目經理的薪水:" + ComSalary.Pay(jack)); 30 31 }
運行結果:
2.示例解析:
通過Pay()方法重載計算項目經理和程序員的薪水。假如我們不用方法重載會怎麽樣呢?例如,計算程序員薪水寫成PaySE(SE se)方法,而計算項目經理的薪水用PayPM(PM pm)方法。這樣確實也能完成計算薪水的任務,但是不符合面向對象的思想,造成一些冗余形式。 大家可以想想,在實際開發中計算薪水的員工可能還有很多種角色,如股東等,我們誇張一點,將需要計算的角色設為上千個,那麽將不得不寫一百個不同的方法。此時,延伸出來的問題有:1.方法命名的困難;2.調用方法者調用方法選擇的困難。因此,方法重載就解決了這樣的麻煩。
四、重載的細節
1.無關返回值,圖例:
結論:僅方法名相同參數列表相同,但返回值類型不同的方法不能構成重載。
2.類中的構造函數也可以實現重載,是方法重載的一種特殊形式。
C#方法重載