zoukankan      html  css  js  c++  java
  • [C#] out vs ref

    当需要从一个方法中有多个返回值时可以考虑使用out和ref这两个关键字。下面通过代码的方式来说明两者的用法和不同之处。

    例如现在有一个如下的Add方法,Add方法只有一个返回值。

        static int Add(int num1, int num2)
        {
            return num1 + num2;
        }

    把这个例子修改的复杂点,现在需要有4个返回值。这时候out关键字就派上用场了。

        static void Maths(int num1, int num2)
        {
            int add = num1 + num2;
            int sub = num1 - num2;
            int divide = num1 / num2;
            int multi = num1 * num2;
        }

    上述代码中,我想将计算后的add,sub,divide,multi四个值均返回给调用方法。使用out关键字来改造这个方法。

        static void Maths(
            int num1, 
            int num2, 
            out int add, 
            out int sub, 
            out int divide, 
            out int multi)
        {
            add = num1 + num2;
            sub = num1 - num2;
            divide = num1 / num2;
            multi = num1 * num2;
        }

    使用下面的代码调用改造后的Maths方法

        int add, sub, multi, div = 0;
    
        Maths(10, 10, out add, out sub, out multi, out div);

    两个注意点:

    1. 调用方法和被调用方法需要返回值的参数需要使用out修饰;
    2. 在调用方法中,不需要给out参数赋值。即使赋值了,在被调用方法中也会被重新计算。

    再来看另一个关于交换两个数值的例子,

        static void Swap(int num1, int num2)
        {
            num1 = num1 + num2;
            num2 = num1 - num2;
            num1 = num1 - num2;
        }

    使用ref关键字改造这个方法,

        static void Swap(ref int num1, ref int num2)
        {
            num1 = num1 + num2;
            num2 = num1 - num2;
            num1 = num1 - num2;
        }

    在调用方法中,需要添加ref关键字修饰

        int num1 = 10;
    
        int num2 = 20;
    
        Swap(ref num1, ref num2);

    使用ref修饰的参数,会把在调用方法中的数据传递到被调用方法中。当被调用方法中修改了ref修饰参数的值,调用方法中的相应的参数值也会同时被修改。下面通过一张图来表示out和ref的使用及参数关系。

    总结:

    当需要有多个返回参数时可以考虑使用out/ref参数;

    ref数据的修改是双向的;

    out数据只从被调用方法传递至调用方法,如果调用方法给out参数赋值,被调用方法会忽略掉这些数据。

    感谢您的阅读~

  • 相关阅读:
    详解MathType中如何插入特殊符号
    详解如何将MathType嵌入word中
    MathType公式编辑器快捷键操作
    MathType初级教程:怎么安装MathType
    AOPR密码过滤器
    教您如何在Word的mathtype加载项中修改章节号
    在word文档中如何插入Mathtype公式
    详解MathType中如何更改公式颜色
    静态缓存和动态缓存
    ThinkPHP U函数生成URL伪静态
  • 原文地址:https://www.cnblogs.com/yang-fei/p/7388056.html
Copyright © 2011-2022 走看看