max*_*axp 3 c# asp.net pointers reference
请注意以下代码:
Control foo = null;
Control bar = null;
int i = 0;
protected void Page_Load(object sender, EventArgs e)
{
test();
test();
Page.Controls.Add(foo);
}
void test()
{
i++;
bar = new Control();
bar.Controls.Add(new LiteralControl(i.ToString()));
if (foo == null)
{
foo = new Control();
foo.Controls.Add(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
在尝试上面的代码时,我很惊讶地看到打印的结果是'1'(不是'2').
我假设这是因为当我添加控件bar时foo,foo.Controls.Add()解析引用bar,而不是仅存储引用本身.
1)任何人都可以确认是这种情况,还是可能详细说明?
2)我有一种感觉,如果我被允许这样做foo.Controls.Add(ref bar);会显示'2',但显然语法是非法的.如果没有重大的重构,是否可能出现这种情况?
打电话给
foo.Controls.Add(bar);
Run Code Online (Sandbox Code Playgroud)
使用当前值bar.这指的是Control包含LiteralControl文本"1"的a.
现在,稍后,您将更改值bar以引用完全不同的控件...但这对已存储的内容没有任何影响foo.Controls.即使你可以通过bar引用传递给Add方法,这实际上也没有任何区别.
我强烈建议,如果您不确定.NET中的引用,参数等是如何工作的,那么您使用控制台应用程序来检查您的理解.它们更易于使用,调试等.