目录

​​重载​​

​​函数重载​​

​​ref传值​​


重载

重载,简单的来说就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

重载的定义

函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同

重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法

方法重载

是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数

具体规范

  • 方法名一定要相同
  • 方法的参数表必须不同,包括参数的类型或个数,以此分区不同的方法体
  • 如果参数个数不同,就不管它的参数类型了
  • 如果参数个数相同,那么参数的类型必须不同
  • 方法的返回类型、修饰符可以相同,也可以不同

举例

static void Main(string[]args)
{
AddNumber(1, 2);
//只打半个括号,可以看到,总共显示3个方法,
//依据每一个方法里的变量类型不同,输入

}
//返回值类型为int,参数的个数为2,参数类型都为int类型
public static int AddNumber(int num1,int num2)
{
return num1 + num2;
}

//返回值类型为double,参数的个数为2,参数类型都为double类型
public static double AddNumber(double num1, double num2)
{
return num1 + num2;
}

//返回值类型为double,参数的个数为2,参数类型为double类型和int类型
public static double AddNumber(double num1, int num2)
{
return num1 + num2;
}

 返回一个数组

static void Main(string[] args)
{
//方法 求和 最大值 最小值

int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//定义nums数组并赋值
int[] arrayNumbers = ArraySumAndMaxOrMin(nums);//调用ArraySumAndMaxOrMin的方法

Console.WriteLine("最大值为{0}",arrayNumbers[0]);
Console.WriteLine("最小值为{0}",arrayNumbers[1]);
Console.WriteLine("和为{0}",arrayNumbers[2]);

Console.ReadKey();
//返回多个值,不同类型
}
public static int[]ArraySumAndMaxOrMin(int[] numbers)
{
int[] array = new int[3];//声明数组
array[0] = int.MinValue;
array[1] = int.MaxValue;
array[2] = 0;

for (int i = 0; i < numbers.Length ; i++)
{
if (numbers[i] > array[0])//如果数组数值小于最小值
{
array[0] = numbers[i];//将数组数值赋给min变量
}
if (numbers[i]<array[1])//如果数组数值大于最大值
{
array[1] = numbers[i];//将数组数值赋给max变量
}
array[2] += numbers[i];//求和

}
return array;
}

函数重载

就是有多个参数不同的构造函数

具体规范

构造函数重载:是用来创建对象的特殊方法的,方法名和类型一样,没有返回值,连void都不用

  • 构造函数可以有参数,new对象的时候传递参数即可
  • 如果不指定构造函数,则类有一个默认的无参数构造函数
  • 如果指定了构造函数,则不再有默认的无参数构造函数
  • 如果需要无参数的构造函数,则需要自己来写

举例

public Person(string name,char gender ,int age)
{//有参数的构造函数的出现会将原来默认的无参数的构造函数干掉。
this._name = name;
this._age = age;
this._gender = gender;
}
//如果此时此刻还想用到无参数的构造函数,那么就必须
//构造函数的重载
public Person()
{
}

 out返回值

static void Main(string[] args)
{
int number1 = 10;//定义变量

//AddNumber的参数number1所采用的值是从方法中传过来的
int sum = AddNumber(out number1);

//如果方法的参数用out修饰了,那么这个参数必须在方法里进行赋值
//变量前加out,是把方法里的值,传到方法外面去了
Console.WriteLine(number1);//所以此刻的number1的值为100
Console.WriteLine(sum);//而返回的总和为120
Console.ReadKey();
}
public static int AddNumber(out int num1)
{
num1 = 100;//定义变量
return num1 + 20;//返回100+20
}

有参数不加out,则加out的参数必须在方法里赋初值,来加out的参数可以不再方法里赋初值

static void Main(string[]args)
{
int num1;//声明变量
int num2 = 80;//给变量赋初值,num2未加out,可以不再方法里赋初值
int numSum = Show(out num1, num2);//调用方法

Console.WriteLine(num1);
Console.WriteLine(num2);
Console.ReadKey();
//out修饰方法的参数了,在方法外面,可以不给这个参数赋值,但是在方法里面必须给这个out
//修饰符的参数赋初值,另外,参数加out,是把这个方法中的参数的值传到方法外面去了
}
public static int Show(out int number1,int number2)
{
number1 = 90;
return number1 + 10;
}

ref传值

static void Main(string[] args)
{
int number1 = 10;//给变量赋初值
int number2 = 20;//给变量赋初值

int sum = Show(ref number1, ref number2);//调用方法

Console.WriteLine("{0},{1},{2}", number1, number2, sum);
Console.ReadKey();
//ref用的时候必须要给这个变量赋初值,和out有区别,out可以把方法里的值传出去
//ref可以把值传到方法里,又可以把值传到方法外
}
public static int Show(ref int num1, ref int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}