zoukankan      html  css  js  c++  java
  • ref out的用法

    现在我们要实现交换2个数的值,由于在程序中经常用到,所以封装到函数中

    代码如下

    1 /// <summary>
    2 /// 交换2个数的值
    3 /// </summary>
    4 static public void Swap(int x1, int x2)
    5 {
    6 int temp = x1;
    7 x1 = x2;
    8 x2 = temp;
    9 }

    在打印出2个数的值

    1  static void Main(string[] args)
    2 {
    3 int x1 = 10;
    4 int x2 = 20;
    5 Swap(x1, x2);
    6 Console.WriteLine("x1={0},x2={1}", x1, x2);
    7 }

    结果如下:

    x1=10

    x2=20

    2个数并没有发生变化,原因在于我们传递给函数的是x1,x2的复制品,所以在swap函数内部的复制品的变化,不会影响到main函数的x1,x2的值(值变量做函数的参数时,传递的都是值的复制),如果我们想在函数内部的参数变化直接影响到外部,那么我们就要用到关键字ref(reference--引用)。

    现在我们队程序稍作改变:

    1 /// <summary>
    2 /// 交换2个数的值
    3 /// </summary>
    4 static public void Swap(ref int x1,ref int x2)
    5 {
    6 int temp = x1;
    7 x1 = x2;
    8 x2 = temp;
    9 }

    在打印出2个数的值:

    1  int x1 = 10;
    2 int x2 = 20;
    3 Swap(ref x1, ref x2);
    4 Console.WriteLine("x1={0},x2={1}", x1, x2);
    5 Console.ReadKey();

    结果如下:

    x1=20

    x2=10

    总结下:

    ref与out的主要区别在于,在.net中函数只能有且只有一个返回值,但是有时我们需要函数返回多个返回值,那要怎么办呢?于是out就派上用场了,而out在函数外被赋值也是白搭,就相当于返回值没有必要被赋值一样,它值负责返回数据,out函数在函数中必须被赋值,这就相当于函数的返回值行为很相像。其实他们就是一回事

    而ref就是使值变量由传递的副本变为自身,也就是值传递变为引用传递而已...

    ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
    ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
    案例:两个变量的交换;int.TryParse。

    例子:int.TryParse函数

    具体代码就不写了

  • 相关阅读:
    oo第四次作业总结
    oo第三次博客总结
    oo第二次博客总结
    oo第一次博客总结
    leetcode155-最小栈
    leetcode141-环形链表
    leetcode278-第一个错误的版本
    leetcode118-杨辉三角
    LeetCode21-合并两个有序列表
    LeetCode27-移除元素
  • 原文地址:https://www.cnblogs.com/shysky77/p/2280424.html
Copyright © 2011-2022 走看看