C#方法重载

一、 描述

  在面向对象的语言中,允许我们在同一个类中定义多个方法名相同、参数列表(参数类型,参数个数)不同的方法,这样的形式我们称为方法重载。调用时编译器会根据实际传入参数的形式,选择与其匹配的方法执行。


二、 重载的分析

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.类中的构造函数也可以实现重载,是方法重载的一种特殊形式。


 

posted @ 2018-05-12 10:31  姜承轩  阅读(25694)  评论(3编辑  收藏  举报