美文网首页
36.C# out修饰符

36.C# out修饰符

作者: 技术老小子 | 来源:发表于2024-03-08 06:33 被阅读0次

    摘要


    out关键字会导致参数通过引用来传递。这与 ref关键字类似,不同之处在于 ref要求变量必须在传递之前进行初始化。若要使用 out参数,方法定义和调用方法都必须显式使用 out关键字。

    在C#编程中,函数调用通常是通过传递参数来实现的。这些参数可以是值类型(值被复制到函数内部)或引用类型(变量指向外部对象)。引用类型的参数通常使用引用参数来传递,其中函数接受的是对变量的引用,而不是对其值的副本。

    在某些情况下,使用引用参数可能会导致问题,特别是当变量需要被修改时。例如,如果在函数内部修改了传递给它的引用参数,但该参数不再在函数外部可见,那么修改可能不会影响到函数外部的代码。这是因为在函数内部修改的变量引用的是内部对象,而不是外部对象。

    为了解决这个问题,C#提供了out关键字,允许函数返回一个值,并且该值必须在调用函数时显式地传递。在函数内部,out参数表示变量的值,该变量必须在函数调用之前被初始化。因此,当函数完成工作时,out参数将包含函数的输出值。

    正文


    一个例子,需要同时返回一个数组中的最大值,最小值,总和

    static void Main(string[] args)
    {
        int[] numbers = { 1, 2, 3, 4, 5, 6, 7 };
        int max = 0;
        int min = 0;
        int sum = 0;
        Values(numbers, out max, out min, out sum);
        Console.WriteLine($"最大:{max},最小:{min},合计:{sum}");
    }
    
    private static void Values(int[] numbers,out int max,out int min,out int sum)
    {
        max = 0;
        min = numbers[4];
        sum = 0;
        for (int i = 0; i < numbers.Length; i++)
        {
            if (numbers[i] > max)
            {
                max = numbers[i];
            }
            if (numbers[i] < min)
            {
                min = numbers[i];
            }
            sum += numbers[i];
        }
    }
    
    
    image.png

    一个登录的例子

    static void Main(string[] args)
    {
        string Name = Console.ReadLine();
        string Password = Console.ReadLine();
    
        string msg = "";
        bool ret = Login(Name, Password, out msg);
    
        Console.WriteLine($"登录:{ret},信息:{msg}");
    }
    
    private static bool Login(string name, string password, out string msg)
    {
        if (name == "admin" && password == "123456")
        {
            msg = "登录成功!";
            return true;
        }
        else
        {
            msg = "登录信息不正确!";
            return false;
        }
    
    }
    
    
    image.png

    相关文章

      网友评论

          本文标题:36.C# out修饰符

          本文链接:https://www.haomeiwen.com/subject/topezdtx.html