zoukankan      html  css  js  c++  java
  • 通俗易懂的ref和out区别

    refout 是C#开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。

    零、 ref 与 out 的异同

    1. 相同:
    • 都是按地址传递;
    • 使用后都将改变原来参数的值;
    • 编译时处理方式相同;
    • 属性不能作为参数传递。
    1. 不同:
    • ref 将参数值传进方法, out 无法将参数值传入方法;
    • ref 传入参数前必须先初始化, out 不必在参数传输方法前初始化,但必须在方法中初始化;
    • ref 用在需要被调用的方法修改调用者的引用的时候, out 用在需要返回多个结果的地方。

    一、代码演示

    ref 将参数值传进方法

    static void Main(string[] args)
    {
        //初始化
        int number = 50;
        Console.WriteLine("调用方法前 number 值:" + number);
        RefFunction(ref number);
        Console.WriteLine("调用方法后 number 值:" + number);
        Console.Read();
    }
    
    // 传入的参数值是 50 ,方法中使用的num值也是50
    static void RefFunction(ref int num)
    {
        num = num / 2;
    }
    

    输出结果如下图所示:
    Zh3gpQ.png

    out 无法将参数值传入方法

    static void Main(string[] args)
    {
        int number = 50;
        Console.WriteLine("调用方法前 number 值:" + number);
        OutFunction(out number);
        Console.WriteLine("调用方法后 number 值:" + number);
        Console.Read();
    }
    
    // 无法将的参数值50传入 ,但是必须在方法中初始化
    static void OutFunction(out int num)
    {
        //初始化
        num = 120;
        num = num / 2;
    }
    

    输出结果如下图所示:
    Zh8EnI.png

    小拓展:如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载。如下代码示例就是重载,可以通过编译:

    static void Function(out int num)
    {
        num = 120;
        num = num / 2;
    }
    static void Function(int num)
    {
        num = num / 2;
    }
    
  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/11260900.html
Copyright © 2011-2022 走看看