把 ref 和 out 关键字说透
ref 和 out 的区别
网上有很多这方面的文章,但是大部分人总是纠结于他们在原理上的那一点点细微的区别,所以导致了难以区分它们,也不知道什么时候改用哪一个了。
但是如果从试用场景的角度对它们进行区别的话,以后你一定不会再纠结了。
当你明白它们的适用场景后,再去扣其中的原理,使用中的一些问题也就迎刃而解了~
简单的来说,它们的区别在于:
ref 关键字 是作用是把一个变量的引用传入函数,和 C/C++ 中的指针几乎一样,就是传入了这个变量的栈指针。
out 关键字 的作用是当你需要返回多个变量的时候,可以把一个变量加上 out 关键字,并在函数内对它赋值,以实现返回多个变量。
几个简单的演示
上面说了 ref 和 out 的作用,非常简单,但是在具体使用的时候却遇到了很多麻烦,因为 C# 中本身就区分了引用类型和值类型。
我先举几个例子,来看看会出现哪些诡异的情况
代码段一:
1234567891011121314151617static
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 关键字在传入前一定要赋值。
这是什么解释?受之于鱼但并没有授之予渔!这到底是为什么呢?
想知道背后真正原理的呢,就继续看下去吧,后面我讲会讲到这里的区别。
代码二:
123456789101112131415161718192021222324static
void
Main(
string
[] args)
{
object
a =
new
object
(), b =
new
object
(), c =
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊
- asp
- php
- Delphi
- Matlab
- JSP
- Foxpro
- JS
- C/C++
- C#/ASP.NET
- VC++
- JAVA
- VB
- 汇编语言
- html/css
- CGI
- XML/UML
- wap
- 网站相关
- 网页素材
- python
- 微信小程序
- thinkphp
如果你遇到编程学习难题:
访问www.zzzyk.com 试试CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,