我是C#的新人,我已经研究了一个月了。有些代码让我很头疼。你能解释一下这是如何工作的,Util类中的void方法如何改变Test类中的int数组? (http://msdn.microsoft.com/en-us/library/orm-9780596527570-03-04.aspx)
我不明白第values[i] = t(values[1])
行怎么可以更改mainvalues[]
如果没有引用或退出就无效?如果可能,那么请为C#初学者解释一下。
谢谢你的时间!
public delegate int Transformer (int x);
public class Util
{
public static void Transform (int[] values,Transformer t)
{
for (int i = 0; i < values.Length; i++)
values[i] = t(values[i]);
}
}
class Test
{
static void Main( )
{
int[] mainvalues = new int[] {1, 2, 3};
Util.Transform(mainvalues, Square); // dynamically hook in Square
foreach (int i in mainvalues)
Console.Write (i + " "); // 1 4 9
}
static int Square (int x) { return x * x; }
}
答案 0 :(得分:1)
因为数组是引用类型。即使你不使用ref
关键字,它也会作为引用传递。你正在更改方法内部的数组值。你将每个值传递给{{1然后获取结果然后用新结果替换每个数字。
Square
是values[i]
,它按值传递,int
返回一个新值(不会更改您拥有的值)。重要的是您要分配它回来了。这就是它改变原始价值的原因。
答案 1 :(得分:0)
要完全理解它,你必须看看代码是如何工作的,如果你使用 visual studio 你可以去调试选择 Step In To 并通过一遍又一遍地单击单步执行来遍历代码,直到代码终止。这就是我自己理解的方式。