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;
    }
    
  • 相关阅读:
    01--图解数据结构之数组实现容器
    00--图解数据结构之开篇+容器基类
    O3-开源框架使用之Butterknife 8.8.1及源码浅析
    3-VII-RecyclerView的item操作
    D11-Android自定义控件之动画篇3-插值器与估值器
    D10-Android自定义控件之动画篇2-动画监听
    /var/spool/postfix/maildrop 出现大量文件原因和解决办法
    golang捕获迭代变量,实参的估值时刻
    Golang标准库深入
    golang中type关键字使用
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/11260900.html
Copyright © 2011-2022 走看看