0
点赞
收藏
分享

微信扫一扫

【C#视频】探究C#中的方法重载、函数重载和传值方式


目录

一、前言

二、方法重载与函数重载

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 < 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;
        }

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#中,方法重载和函数重载是增强代码灵活性和可读性的强大工具。了解传值方式也是编写稳健程序的关键。通过方法重载,您可以在同一个类中根据不同参数实现更多的逻辑,通过合适的传值方式,您可以控制参数的传递和修改行为。

举报

相关推荐

0 条评论