【发布时间】:2014-09-21 08:23:22
【问题描述】:
我有一个问题。当我做一个
Int32 ii = new Int32();
我是否正在创建具有标识符“ii”的引用类型的值类型?如果我正在创建一个引用类型,那么当我将该引用的副本传递给一个更改其值的方法时,当方法返回时我看不到更改是怎么回事?当我运行下面的代码时,我得到“0”。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Int32 ii = new Int32();
changeit(ii);
Console.WriteLine(ii.ToString());
Console.ReadLine();
}
static void changeit (Int32 i)
{
i = 2;
}
static void changeit(ref int i)
{
i = 2;
}
}
}
【问题讨论】:
-
new不会将值类型更改为引用类型。 -
因为你调用了错误的函数。只需执行
changeit(ref li),您就会看到值的变化。 -
@tnw 这是按引用传递值类型,而不是按值传递引用类型,正如他所期望的那样。它通过意想不到的方式创造了预期的结果,阻碍了对相关概念的理解。
-
谢谢大家。每次我认为我理解并离开时,它总是把我拉回来。
标签: c# pass-by-reference