• C# 函数


    参数数组:

    C#允许为函数指定一个(只能指定一个)特殊参数,这个参数必须是函数定义中的最后一个参数,称为参数数组。参数数组允许使用个数不定的参数调用函数,可使用params关键字定义它们。

    参数数组可以简化代码,因为在调用代码中不必传递数组,而是传递同类型的几个参数,这些参数会放在可在函数中使用的一个数组中。

    定义舒勇参数数组的函数时,需要使用下列代码:

    static <returnType> <FunctionName>(<p1Type> <p1Name>, ..., params <type>[] <name>)
    {
       ...
       return <returnValue>;
    }

    使用下面的代码可以调用该函数:

    <FunctionName>(<p1>, ..., <val1>, <val2>, ...)

    其中<val1>和<val2>等都是<type>类型的值,用于初始化<name>数组,可以指定的参数个数几乎不受限制,但他们都必须是<type>类型。甚至根本不必指定参数。

    下面的示例定义并使用带有params类型参数的函数:

    class Program
        {
            static void Main(string[] args)
            {
                int sum = GetVal(1, 2, 5, 7, 9);
                Console.WriteLine($"总和为:{sum}");
            }
    
            /// <summary>
            /// 求和
            /// </summary>
            /// <param name="vals">可以用任意数量的int参数,但不接受其他类型</param>
            /// <returns></returns>
            public static int GetVal(params int[] vals)
            {
                int checkVal = 0 ;
                foreach (int item in vals)
                {
                    checkVal += item;
                }
                return checkVal;
            }
        }    

     引用参数:

    /// <summary>
    /// 使用ref关键字指定参数
    /// </summary>
    /// <param name="val"></param>
    public static void GetVal(ref int val)
    {
        val *= 2;
        Console.WriteLine($"val的值:{val}");
    }
    
    int num = 5;    
    Console.WriteLine($"num为:{num}");
    //在函数调用中再次指定它(这是必需的)
    GetVal(ref num);
    Console.WriteLine($"num为:{num}");

    输出结果:

    用作ref参数的变量有两个限制。首先,函数可能会改变引用参数的值,所以必须在函数调用中使用“非常量”变量。所以,下面代码是非法的:

     其次,必须使用初始化过的变量。C#不允许假定ref参数在使用它的函数中初始化,下面代码也是非法的:

     输出参数:

            /// <summary>
            /// 获取数组中最大值的元素索引
            /// 如果数组中有多个元素的值都是这个最大值,只提取第一个最大值的索引
            /// </summary>
            /// <param name="val"></param>
            public static int MaxVal(int[] intArray, out int maxIndex)
            {
                int maxVal = intArray[0];
                maxIndex = 0;
                for (int i = 1; i < intArray.Length; i++)
                {
                    if (intArray[i] > maxVal)
                    {
                        maxVal = intArray[i];
                        maxIndex = i;
                    }
                }
                return maxVal;
            }
    
    int[] myArray = { 1, 8, 3, 9, 2, 5, 9, 3, 0, 2 };
    int maxIndex;
    Console.WriteLine($"myArray中的最大值为:{MaxVal(myArray, out maxIndex)}");
    Console.WriteLine($"第一个最大值的索引为:{maxIndex + 1}");

    输出结果:

     ref和out的重要区别:

    1. 把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数

    2. 在函数使用out参数时,必须把它看成尚未赋值。即调用代码可以把已赋值的变量用作out参数,但存储在该变量中的值会在函数执行时丢失

    3. out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候

  • 相关阅读:
    第三周作业
    第二周作业
    实时控制软件大作业总结
    实时控制软件大作业四
    实时控制软件大作业三
    实时控制软件大作业二
    轨迹插补程序
    实时控制软件大作业博客一
    实时控制软件设计第四周作业
    实时控制软件设计第三周作业-1
  • 原文地址:https://www.cnblogs.com/zhaoyl9/p/11571964.html
Copyright © 2020-2023  润新知