《程序设计Csharp程序设计 (42).pdf》由会员分享,可在线阅读,更多相关《程序设计Csharp程序设计 (42).pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C#程序设计 Programming in C#方法重载 C#程序设计程序设计 1、方法重载的定义 2、重载方法的调用 4.6.1 方法重载定义 3 C#的一个类中超过一个方法具有相同名称的现象叫做方法重载。4.6.1 方法重载定义 4 在C#中,实现方法重载时必须保证使用相同名称的每个方法有一个和其他方法不同的签名,并且判断方法重载是否合法时编译器只考查这个方面。4.6.1 方法重载定义 5 方法的签名信息包括:方法名称;参数的数目;参数的数据类型和顺序;参数的修饰符;特别注意,方法的返回类型和方法的形参名称不是方法签名的一部分。4.6.1 方法重载定义 6 下面是一些合法的和不合法的方法重
2、载示例。/合法的方法重载合法的方法重载 classclass A A longlong AddValuesAddValues(intint a a,intint b b)returnreturn a a+b b;longlong AddValuesAddValues(intint x x,intint y y,intint z z)returnreturn x x+y y+z z;floatfloat AddValuesAddValues(floatfloat f1f1,floatfloat f2f2)returnreturn f1f1+f2f2;longlong AddValuesAddVa
3、lues(intint x x,intint y y,outout intint z z)z z =x x+y y;returnreturn x x+y y+z z;4.6.1 方法重载定义 7/不合法的方法重载不合法的方法重载 classclass B B longlong AddValuesAddValues(intint a a,intint b b)returnreturn a a+b b;longlong AddValuesAddValues(intint x x,intint y y)returnreturn x x+y y;仅形参名称不同并不会形成不同的方法签名。8 4.6.1
4、方法重载定义【例4.7】方法重载示例。9 4.6.1 方法重载定义 例4.7 1 usingusing SystemSystem;2 classclass TestTest 3 4 static voidstatic void MainMain()()5 6 /调用调用static int max(int a,int b,int c)static int max(int a,int b,int c),输出,输出1010 7 ConsoleConsole.WriteLineWriteLine(maxmax(1010,5 5,3 3););8 /调用调用static int max(int a,i
5、nt b)static int max(int a,int b),输出,输出4 4 9 ConsoleConsole.WriteLineWriteLine(maxmax(3 3,4 4););10 /调用调用static double max(double x,double y)static double max(double x,double y),输出,输出4.34.3 11 ConsoleConsole.WriteLineWriteLine(maxmax(3.03.0,4.34.3););12 13 static intstatic int maxmax(intint a,a,intin
6、t b b)14 ifif(a a b b)returnreturn a a;else returnelse return b b;15 static intstatic int maxmax(intint a,a,intint b,b,intint c c)10 4.6.1 方法重载定义 例4.7 16 17 ifif(a a b b&a a c c)18 returnreturn a a;19 ifif(b b a a&b b c c)20 returnreturn b b;21 returnreturn c c;22 23 static doublestatic double maxma
7、x(doubledouble x,x,doubledouble y y)24 ifif(x x y y)returnreturn x x;else returnelse return y y;25 11 4.6.1 方法重载定义 例4.7 1 usingusing System;System;2 classclass TestTest 3 4 static voidstatic void Main()Main()5 6 /调用调用static int max(int a,int b,int c)static int max(int a,int b,int c),输出,输出1010 7 Cons
8、ole.WriteLine(max(10,Console.WriteLine(max(10,5,5,3);3);8 /调用调用static int max(int a,int b)static int max(int a,int b),输出,输出4 4 9 Console.WriteLine(max(3,Console.WriteLine(max(3,4);4);10 /调用调用static double max(double x,double y)static double max(double x,double y),输出,输出4.34.3 11 Console.WriteLine(max
9、(3.0,Console.WriteLine(max(3.0,4.3);4.3);12 13 static intstatic int max(intmax(int a,a,intint b)b)14 ifif(a(a b)b)returnreturn a;a;else returnelse return b;b;15 static intstatic int max(intmax(int a,a,intint b,b,intint c)c)10 4 4.3 12 4.6.1 方法重载定义 例4.7 1 usingusing SystemSystem;2 classclass TestTest
10、 3 4 static voidstatic void MainMain()()5 6 /调用调用static int max(int a,int b,int c)static int max(int a,int b,int c),输出,输出1010 7 ConsoleConsole.WriteLineWriteLine(maxmax(1010,5 5,3 3););8 /调用调用static int max(int a,int b)static int max(int a,int b),输出,输出4 4 9 ConsoleConsole.WriteLineWriteLine(maxmax(3
11、 3,4 4););10 /调用调用static double max(double x,double y)static double max(double x,double y),输出,输出4.34.3 11 ConsoleConsole.WriteLineWriteLine(maxmax(3.03.0,4.34.3););12 13 static intstatic int maxmax(intint a,a,intint b b)14 ifif(a a b b)returnreturn a a;else returnelse return b b;15 static intstatic
12、int maxmax(intint a,a,intint b,b,intint c c)13 4.6.1 方法重载定义 例4.7 1 usingusing SystemSystem;2 classclass TestTest 3 4 static voidstatic void MainMain()()5 6 /调用调用static int max(int a,int b,int c)static int max(int a,int b,int c),输出,输出1010 7 ConsoleConsole.WriteLineWriteLine(maxmax(1010,5 5,3 3););8 /
13、调用调用static int max(int a,int b)static int max(int a,int b),输出,输出4 4 9 ConsoleConsole.WriteLineWriteLine(maxmax(3 3,4 4););10 /调用调用static double max(double x,double y)static double max(double x,double y),输出,输出4.34.3 11 ConsoleConsole.WriteLineWriteLine(maxmax(3.03.0,4.34.3););12 13 static intstatic i
14、nt maxmax(intint a,a,intint b b)14 ifif(a a b b)returnreturn a a;else returnelse return b b;15 static intstatic int maxmax(intint a,a,intint b,b,intint c c)14 4.6.1 方法重载定义 例4.7 1 usingusing SystemSystem;2 classclass TestTest 3 4 static voidstatic void MainMain()()5 6 /调用调用static int max(int a,int b,
15、int c)static int max(int a,int b,int c),输出,输出1010 7 ConsoleConsole.WriteLineWriteLine(maxmax(1010,5 5,3 3););8 /调用调用static int max(int a,int b)static int max(int a,int b),输出,输出4 4 9 ConsoleConsole.WriteLineWriteLine(maxmax(3 3,4 4););10 /调用调用static double max(double x,double y)static double max(doub
16、le x,double y),输出,输出4.34.3 11 ConsoleConsole.WriteLineWriteLine(maxmax(3.03.0,4.34.3););12 13 static intstatic int maxmax(intint a,a,intint b b)14 ifif(a a b b)returnreturn a a;else returnelse return b b;15 static intstatic int maxmax(intint a,a,intint b,b,intint c c)4.6.2 重载方法的调用 15 对于方法使用者来说,重载方法的
17、调用和普通方法的调用没有什么区别。它使用同一个方法名对应实现相似功能的一组方法,使得程序员调用时非常方便。4.6.2 重载方法的调用 16 调用重载方法时,编译器会根据参数类型、参数数目、参数位置、参数修饰符等来自动解析当前方法调用使用哪个版本的方法,编译器解析的结果可能会有以下三种情况:找到与实参唯一匹配的方法,则调用该方法;找不到与实参匹配的方法,报告编译错误;存在多个与实参匹配的方法,并且没有明显的选择,则编译器报告该方法调用存在二义性。4.6.2 重载方法的调用 17 其解析步骤如下:确定与该调用相对应的重载方法集合,称为候选方法。候选方法与被调用方法名称相同,并且在调用点上其声明可见;4.6.2 重载方法的调用 18 从候选方法中选择一个或多个方法,它们能够使用方法调用中指定的实参来调用,称为可行方法。可行方法的形参个数要与调用的实参数目相同,同时调用的实参类型必须与可行方法的形参类型对应匹配,或可隐式类型转换为相应的类型;4.6.2 重载方法的调用 19 在可行方法中寻找最优方法,其寻找依据为:实参类型与形参类型完全对应,则该方法即为最优方法;每个实参类型与形参类型都接近,则调用该方法;至少有一个实参类型与形参类型接近程度由于其他方法,则调用该方法;逐个分析实参后仍找不到唯一的候选方法,则编译器将提示调用具有二义性。结束