设为首页 加入收藏

TOP

把 ref 和 out 关键字说透 (三)
2014-11-23 23:36:36 来源: 作者: 【 】 浏览:30
Tags:ref out 关键字
ode size 5 (0x5)
.maxstack 8
IL_0000: nop
IL_0001: ldnull
IL_0002: starg.s a
IL_0004: ret
} // end of method Program::Test1
.method private hidebysig static
void Test2 (
object & a
) cil managed
{
// Method begins at RVA 0x2059
// Code size 5 (0x5)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.0 //多了这行代码
IL_0002: ldnull
IL_0003: stind. ref
IL_0004: ret
} // end of method Program::Test2

上面是直接传入,并赋 null 值的

下面是加 ref 的

我们可以发现仅仅是多了一行代码:IL_0001: ldarg.0

其实,这样代码的作用就是讲参数0加载到堆栈上,也就是先根据引用,找到了外部的变量,然后再根据外部的变量,找到了最终的对象!

那现在你知道什么时候该加 ref,什么时候不用加 ref 了吗?

再看了一个例子:

1
2
3
4
5
6
7
8
private static void Test1(List< int > list)
{
list.Clear();
}
private static void Test2( ref List< int > list)
{
list = new List< int >();
}

同样是清空一个 List,如果没加 ref ,只能用 clear。

而加了 ref 后可以直接 new 一个新的~

如果你没加 ref 就直接 new 一个新的了,抱歉,外部根本不知道有这个东西,你们操作的将不是同一个 List

所以,你一定要了解这点,并注意一下几件事:

1、一般情况下不要用 ref

2、如果你没加 ref,千万别直接给它赋值,因为外面会接收不到…

现在你全部明白了吗?^_^

原文地址:把 ref 和 out 关键字说透

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言移位 下一篇c语言:计算输入字符个数及字母出..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: