1. 程式人生 > >C#方法重載

C#方法重載

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#方法重載