重载
重载,简单的来说就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
重载的定义
函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同
重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法
方法重载
是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数
具体规范
- 方法名一定要相同
- 方法的参数表必须不同,包括参数的类型或个数,以此分区不同的方法体
- 如果参数个数不同,就不管它的参数类型了
- 如果参数个数相同,那么参数的类型必须不同
- 方法的返回类型、修饰符可以相同,也可以不同
举例
1. static void Main(string[]args) 2. { 3. AddNumber(1, 2); 4. //只打半个括号,可以看到,总共显示3个方法, 5. //依据每一个方法里的变量类型不同,输入 6. 7. } 8. //返回值类型为int,参数的个数为2,参数类型都为int类型 9. public static int AddNumber(int num1,int num2) 10. { 11. return num1 + num2; 12. } 13. 14. //返回值类型为double,参数的个数为2,参数类型都为double类型 15. public static double AddNumber(double num1, double num2) 16. { 17. return num1 + num2; 18. } 19. 20. //返回值类型为double,参数的个数为2,参数类型为double类型和int类型 21. public static double AddNumber(double num1, int num2) 22. { 23. return num1 + num2; 24. }
返回一个数组
1. static void Main(string[] args) 2. { 3. //方法 求和 最大值 最小值 4. 5. int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//定义nums数组并赋值 6. int[] arrayNumbers = ArraySumAndMaxOrMin(nums);//调用ArraySumAndMaxOrMin的方法 7. 8. Console.WriteLine("最大值为{0}",arrayNumbers[0]); 9. Console.WriteLine("最小值为{0}",arrayNumbers[1]); 10. Console.WriteLine("和为{0}",arrayNumbers[2]); 11. 12. Console.ReadKey(); 13. //返回多个值,不同类型 14. } 15. public static int[]ArraySumAndMaxOrMin(int[] numbers) 16. { 17. int[] array = new int[3];//声明数组 18. array[0] = int.MinValue; 19. array[1] = int.MaxValue; 20. array[2] = 0; 21. 22. for (int i = 0; i < numbers.Length ; i++) 23. { 24. if (numbers[i] > array[0])//如果数组数值小于最小值 25. { 26. array[0] = numbers[i];//将数组数值赋给min变量 27. } 28. if (numbers[i]<array[1])//如果数组数值大于最大值 29. { 30. array[1] = numbers[i];//将数组数值赋给max变量 31. } 32. array[2] += numbers[i];//求和 33. 34. } 35. return array; 36. }
函数重载
就是有多个参数不同的构造函数
具体规范
构造函数重载:是用来创建对象的特殊方法的,方法名和类型一样,没有返回值,连void都不用
- 构造函数可以有参数,new对象的时候传递参数即可
- 如果不指定构造函数,则类有一个默认的无参数构造函数
- 如果指定了构造函数,则不再有默认的无参数构造函数
- 如果需要无参数的构造函数,则需要自己来写
举例
1. public Person(string name,char gender ,int age) 2. {//有参数的构造函数的出现会将原来默认的无参数的构造函数干掉。 3. this._name = name; 4. this._age = age; 5. this._gender = gender; 6. } 7. //如果此时此刻还想用到无参数的构造函数,那么就必须 8. //构造函数的重载 9. public Person() 10. { 11. }
out返回值
1. static void Main(string[] args) 2. { 3. int number1 = 10;//定义变量 4. 5. //AddNumber的参数number1所采用的值是从方法中传过来的 6. int sum = AddNumber(out number1); 7. 8. //如果方法的参数用out修饰了,那么这个参数必须在方法里进行赋值 9. //变量前加out,是把方法里的值,传到方法外面去了 10. Console.WriteLine(number1);//所以此刻的number1的值为100 11. Console.WriteLine(sum);//而返回的总和为120 12. Console.ReadKey(); 13. } 14. public static int AddNumber(out int num1) 15. { 16. num1 = 100;//定义变量 17. return num1 + 20;//返回100+20 18. }
有参数不加out,则加out的参数必须在方法里赋初值,来加out的参数可以不再方法里赋初值
1. static void Main(string[]args) 2. { 3. int num1;//声明变量 4. int num2 = 80;//给变量赋初值,num2未加out,可以不再方法里赋初值 5. int numSum = Show(out num1, num2);//调用方法 6. 7. Console.WriteLine(num1); 8. Console.WriteLine(num2); 9. Console.ReadKey(); 10. //out修饰方法的参数了,在方法外面,可以不给这个参数赋值,但是在方法里面必须给这个out 11. //修饰符的参数赋初值,另外,参数加out,是把这个方法中的参数的值传到方法外面去了 12. } 13. public static int Show(out int number1,int number2) 14. { 15. number1 = 90; 16. return number1 + 10; 17. }
ref传值
1. static void Main(string[] args) 2. { 3. int number1 = 10;//给变量赋初值 4. int number2 = 20;//给变量赋初值 5. 6. int sum = Show(ref number1, ref number2);//调用方法 7. 8. Console.WriteLine("{0},{1},{2}", number1, number2, sum); 9. Console.ReadKey(); 10. //ref用的时候必须要给这个变量赋初值,和out有区别,out可以把方法里的值传出去 11. //ref可以把值传到方法里,又可以把值传到方法外 12. } 13. public static int Show(ref int num1, ref int num2) 14. { 15. num1 = 100; 16. num2 = 200; 17. return num1 + num2; 18. }