当前位置:编程学习 > C/C++ >>

把 ref 和 out 关键字说透

ref 和 out 的区别

网上有很多这方面的文章,但是大部分人总是纠结于他们在原理上的那一点点细微的区别,所以导致了难以区分它们,也不知道什么时候改用哪一个了。

但是如果从试用场景的角度对它们进行区别的话,以后你一定不会再纠结了。

当你明白它们的适用场景后,再去扣其中的原理,使用中的一些问题也就迎刃而解了~

 

简单的来说,它们的区别在于:

ref 关键字 是作用是把一个变量的引用传入函数,和 C/C++ 中的指针几乎一样,就是传入了这个变量的栈指针。

out 关键字 的作用是当你需要返回多个变量的时候,可以把一个变量加上 out 关键字,并在函数内对它赋值,以实现返回多个变量。

 

 

几个简单的演示

上面说了 ref 和 out 的作用,非常简单,但是在具体使用的时候却遇到了很多麻烦,因为 C# 中本身就区分了引用类型和值类型。

我先举几个例子,来看看会出现哪些诡异的情况

 

代码段一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void Main(string[] args)
{
    int a;
    Test1(out a);//编译通过
 
    int b;
    Test2(ref b);//编译失败
}
 
static void Test1(out int a)
{
    a = 1;
}
static void Test2(ref int b)
{
    b = 1;
}

这两个关键字看起来用法一样,为什么会有合格现象?

网上的答案很简单:out 关键字在传入前可以不赋值,ref 关键字在传入前一定要赋值。

这是什么解释?受之于鱼但并没有授之予渔!这到底是为什么呢?

想知道背后真正原理的呢,就继续看下去吧,后面我讲会讲到这里的区别。

 

代码二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,