20250528-C#知识:函数简介及函数重载

发布于:2025-05-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

C#知识:函数简介及函数重载

本文主要介绍函数参数和函数重载相关的知识点


1、函数

  • 函数一般写在类中

  • 一般函数调用

        static int Add(int num, int value)
        {
            num += value;
            return num;
        }
            //一般函数调用,发生值类型参数的复制
            int num = 1;
            Add(num, 1);    //调用 Add(int num, int value)
            Console.WriteLine(num); //1

2、ref和out

2.1 ref

  • 必须初始化,它变我也变
  • 类似C++中的引用,不需要在被调用函数中赋值
  • ref函数形参不能有默认值
        static int Add(ref int num, int value)
        {
            num += value;
            return num;
        }
            int num2 = 1;
            Add(ref num2, 1);   //调用 Add(ref int num, int value)
            Console.WriteLine(num2);    //2

2.2 out

  • 可以不初始化,它变我也变
  • 需要在被调用函数中赋值
  • out函数形参不能有默认值
        static int Add2(out int num, int value)
        {
            num = 100;
            num += value;   
            return num;
        }
            int num3 = 2;   //这个赋值没啥子用,在被调用函数值又会重新赋值
            Add2(out num3, 2);  //调用 Add2(out int num, int value)
            Console.WriteLine(num3);    //102

3、params变长参数

  • 在函数调用时,可以传入多个相同类型的实参
  • 只能有一个形参为params类型,且必须是最后一个
        static int Add(int num, params int[] values)
        {
            foreach (int value in values) 
            { 
                num += value;
            }
            return num;
        }
            int num4 = Add(0, 1, 2, 3); //调用 Add(int num, params int[] values)
            Console.WriteLine(num4);    //6

4、默认参数

  • 可以为多个形参设置默认值,但是有默认值的形参后面所有形参必须都有默认值
        static int Add3(int num, int value = 1)
        {
            num += value;
            return num;
        }
            int num5 = Add3(20);    //调用 Add3(int num, int value = 1)
            Console.WriteLine(num5);    //21

5、函数重载

  • 方法签名不同(参数类型或参数个数不同)的同名函数构成重载
  • ref int 或者out int 可以和 int 构成重载
  • ref 与 out 不存在重载
  • params int[]可以和 int 构成重载
  • params int[] 不能与 int[] 构成重载
  • 默认值不构成重载
        static int Add(int num, int value)
        {
            num += value;
            return num;
        }
        //ref int 可以和 int 构成重载
        static int Add(ref int num, int value)
        {
            num += value;
            return num;
        }


        //ref 与 out 不存在重载
        //static int Add(out int num, int value)
        //{
        //    num += value;
        //    return num;
        //}

        static int Add2(out int num, int value)
        {
            num = 100;
            num += value;   
            return num;
        }
        // params int[]可以和 int 构成重载
        static int Add(int num, params int[] values)
        {
            foreach (int value in values) 
            { 
                num += value;
            }
            return num;
        }

        //params int[] 不能与 int[] 构成重载
        //static int Add(int num, int[] values)
        //{
        //    foreach(int value in values)
        //    {
        //        num += value;
        //    }
        //    return num;
        //}

        //默认值不构成重载
        //static int Add(int num , int value = 1)
        //{
        //    num += value;
        //    return num;
        //}

        static int Add3(int num, int value = 1)
        {
            num += value;
            return num;
        }

6、完整代码示例:

namespace FunctionOverloading
{
    internal class Program
    {
        static int Add(int num, int value)
        {
            num += value;
            return num;
        }
        //ref int 可以和 int 构成重载
        static int Add(ref int num, int value)
        {
            num += value;
            return num;
        }


        //ref 与 out 不存在重载
        //static int Add(out int num, int value)
        //{
        //    num += value;
        //    return num;
        //}

        static int Add2(out int num, int value)
        {
            num = 100;
            num += value;   
            return num;
        }
        // params int[]可以和 int 构成重载
        static int Add(int num, params int[] values)
        {
            foreach (int value in values) 
            { 
                num += value;
            }
            return num;
        }

        //params int[] 不能与 int[] 构成重载
        //static int Add(int num, int[] values)
        //{
        //    foreach(int value in values)
        //    {
        //        num += value;
        //    }
        //    return num;
        //}

        //默认值不构成重载
        //static int Add(int num , int value = 1)
        //{
        //    num += value;
        //    return num;
        //}

        static int Add3(int num, int value = 1)
        {
            num += value;
            return num;
        }



        static void Main(string[] args)
        {
            //函数一般写在类中
            //一般函数调用,发生值类型参数的复制
            int num = 1;
            Add(num, 1);    //调用 Add(int num, int value)
            Console.WriteLine(num); //1

            //ref和out

            //ref
            //必须初始化,它变我也变
            //类似C++中的引用,不需要在被调用函数中赋值
            //ref函数形参不能有默认值
            int num2 = 1;
            Add(ref num2, 1);   //调用 Add(ref int num, int value)
            Console.WriteLine(num2);    //2

            //out
            //可以不初始化,它变我也变
            //需要在被调用函数中赋值
            //out函数形参不能有默认值
            int num3 = 2;   //这个赋值没啥子用,在被调用函数值又会重新赋值
            Add2(out num3, 2);  //调用 Add2(out int num, int value)
            Console.WriteLine(num3);    //102

            //params变长参数
            //在函数调用时,可以传入多个相同类型的实参
            //只能有一个形参为params类型,且必须是最后一个
            int num4 = Add(0, 1, 2, 3); //调用 Add(int num, params int[] values)
            Console.WriteLine(num4);    //6

            //默认参数
            //可以为多个形参设置默认值,但是有默认值的形参后面所有形参必须都有默认值
            int num5 = Add3(20);    //调用 Add3(int num, int value = 1)
            Console.WriteLine(num5);    //21
        }
    }
}


7、参考资料

  1. 《唐老狮C#基础》

本篇结束,感谢您的阅读~

在这里插入图片描述