zoukankan      html  css  js  c++  java
  • C# out ref 用法总结

    C#里面的 out 和ref参数时常会用到,但对它们的区别比较模糊。所以总结一下。下面是测试代码:

     1 public void Start()
     2     {
     3         //outSum没必要赋值,赋值了也完全没用。
     4         //如果AddByOut函数内部直接使用out对应的参数,会报错:使用了未被赋值的 out 参数a
     5         int outSum = 1;
     6         int ov1 = 2;
     7         int ov2 = 3;
     8         AddByOut(out outSum, ov1, ov2);
     9         Console.WriteLine("outSum : " + outSum + "  v1: " + ov1 + "   v2: " + ov2);
    10 
    11 
    12         //refSum 必须赋值
    13         int refSum = 1;
    14         int rv1 = 2;
    15         int rv2 = 3;
    16         //如果refSum没有赋值,这里会报错:使用了未赋值的局部变量 refSum
    17         AddByRef(ref refSum, rv1, rv2);
    18         Console.WriteLine("refSum : " + refSum + "  v1: " + rv1 + "   v2: " + rv2);
    19     }
    20 
    21     public void AddByOut(out int a, int b, int c)
    22     {
    23         //a = a + b + c;// a 未被赋值,不能直接使用,即使是调用的地方 out对应的参数初始化也没用
    24         a = b + c;
    25     }
    26 
    27     public void AddByRef(ref int a, int b, int c)
    28     {
    29         a = a + b + c; // 可以直接使用a 
    30     }

    测试结果:

    总结:   1、调用带ref关键字的函数,必须对 ref 对应的参数赋值;而out关键字不需要。

        2、带ref 关键字的函数内部可以直接使用 ref 对应的参数;out 关键字的函数,必须在函数内部对out对应的参数赋值后才能使用。

          (归结1,2点:ref在外面初始化,out在里面初始化

        3、两个关键字都能使值类型按引用类型使用,即修改了函数外部申明的变量

    注:更多专业介绍请参考微软官方文档

    out 参数修饰符(C# 参考)  https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/out-parameter-modifier

    ref(C# 参考)                      https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/ref

  • 相关阅读:
    [转]Splay算法
    [转]模拟退火算法
    [转]九种背包问题
    [转]C++实现平衡二叉树
    关于set
    __builtin_popcount
    为什么调用线程的join方法,等待的是执行join方法的线程
    volatile and 指令重排序 (单例模式用volatile来声明单例对象)
    线程池
    sts 转用 IDEA随记
  • 原文地址:https://www.cnblogs.com/yougoo/p/9562686.html
Copyright © 2011-2022 走看看