目录
一、前言
二、方法重载与函数重载
1、重载
2、方法重载
2.1、具体规范
2.2、举例
2.2.1、返回一个数组
3、函数重载
3.1、具体规范
3.2、举例
3.2.1、out返回值
三、传值
1、传值方式
1.1、值传递
1.2、引用传递
2、代码示例
四、总结
一、前言
C#作为一门现代的编程语言,提供了丰富的特性来增强代码的可读性和可维护性。其中,方法重载、函数重载以及传值方式是开发过程中常用的概念。本文将深入探讨C#中的这些概念,帮助您更好地理解如何在项目中运用它们。
二、方法重载与函数重载
1、重载
重载定义是指在相同的作用域中,使用相同的函数名,但是参数列表不同的多个函数。通过函数重载,可以根据不同的参数列表来调用不同的函数。重载函数必须有不同的参数列表,包括参数类型不同,参数个数不同或者参数顺序不同。在执行函数调用时,编译器会根据传递的参数类型、个数和顺序来自动匹配调用的函数。重载可以提高程序的灵活性和可读性。
2、方法重载
方法重载(Method Overloading)是指在同一个类中,可以定义有相同名称但参数列表不同(包括参数个数、类型、顺序等)的多个方法。在实际调用时,根据传入的参数类型或个数来判断使用哪个方法。
方法重载的目的在于提高代码的复用性和可读性,避免方法名称的冗长。使用方法重载可以使得方法命名更加直观、清晰,使开发者更容易理解和使用代码。
2.1、具体规范
方法重载的规范如下:
1. 在同一个类中,方法名必须相同,但参数列表必须不同。参数列表包括参数类型、参数个数和参数顺序。
2. 方法重载与方法的返回类型无关,只看方法名和参数列表。
3. 方法重载可以发生在同一个类中,也可以发生在父子类之间。当发生在父子类之间时,子类中的方法必须与父类中的方法有相同的方法名和参数列表,可以有不同的返回类型或访问修饰符。
4. 不能仅通过参数的返回类型或修饰符来区分方法重载。
5. 重载方法可以有不同的访问修饰符,但访问权限不能更低。例如,如果有一个public方法,那么重载该方法的方法必须为public或protected。
6. 不能通过抛出不同的异常来重载方法。
7. 如果两个方法除了参数列表不同外,其他部分完全相同,这种情况不被允许。
2.2、举例
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;
}
2.2.1、返回一个数组
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 array[0])//如果数组数值小于最小值
{
array[0] = numbers[i];//将数组数值赋给min变量
}
if (numbers[i]
3、函数重载
函数重载(function overloading)是指在同一作用域内定义多个同名函数,但它们的参数类型、个数或顺序不同。函数重载的目的是为了提高代码的复用性和灵活性,使得相同的操作可以针对不同的参数类型、个数或顺序进行处理,从而简化程序代码和提高开发效率。
在编译器编译代码时,根据函数调用的参数类型、个数或顺序匹配最合适的函数进行调用。如果找不到匹配的函数,编译器将会报错。
3.1、具体规范
函数重载是指在同一个作用域内,可以声明多个函数名相同但参数列表不同的函数。函数重载的具体规范如下:
1.函数名必须相同,但参数列表必须不同,包括参数类型、参数个数、参数顺序等。
2.返回类型不同不作为函数重载的区分条件。
3.函数重载可以发生在同一个类中,也可以发生在不同的类中。
4.函数重载不能仅仅是参数名称、参数类型顺序或参数类型是否为引用、指针等的不同,这些所谓的“微小的差异”不足以让编译器认为是不同的函数。
5.当调用函数时,编译器会根据实参的类型和数量、顺序等信息,匹配到最合适的函数。
6.函数重载仅仅是函数名的重载,其他的函数特征标(如函数修饰符、函数返回类型等)不能作为重载的区分条件。
7.不支持只有返回类型不同的函数重载,因为这样无法根据调用时传入的参数类型,确定调用哪个函数。
总之,函数重载是一种方便程序员编写代码的方式,可以提高代码的可读性和重用性,但是需要严格遵守函数重载的规范,否则会出现编译错误或运行时错误。
3.2、举例
public Person(string name,char gender ,int age)
{//有参数的构造函数的出现会将原来默认的无参数的构造函数干掉。
this._name = name;
this._age = age;
this._gender = gender;
}
//如果此时此刻还想用到无参数的构造函数,那么就必须
//构造函数的重载
public Person()
{
}
3.2.1、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;
}
三、传值
1、传值方式
1.1、值传递
值传递是指将参数的实际值复制给形式参数,此时在函数内部修改形式参数的值,不会影响实际参数的值。换句话说,只是传递了值的副本,而非原值本身。这种传递方式适用于简单类型的数据,如整数、浮点数、字符等,而不适合复杂类型的数据,如数组、结构体、对象等。
1.2、引用传递
引用传递是指在传递参数时,传递的不是值的副本,而是原始的变量或数据的地址。这样做可以避免在函数中复制大量数据,提高程序的执行效率。在引用传递中,对形参的修改会影响原始变量或数据,这与值传递不同。在许多编程语言中,引用传递使用&符号来指定。
2、代码示例
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;
}
四、总结
在C#中,方法重载和函数重载是增强代码灵活性和可读性的强大工具。了解传值方式也是编写稳健程序的关键。通过方法重载,您可以在同一个类中根据不同参数实现更多的逻辑,通过合适的传值方式,您可以控制参数的传递和修改行为。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net