【发布时间】:2010-10-28 16:17:49
【问题描述】:
注意以下代码:
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);
}
}
在尝试上面的代码时,我惊讶地看到打印的结果是 '1'(不是 '2')。
我假设这是因为当我将控件 bar 添加到 foo 时,foo.Controls.Add() 解析引用 bar,而不仅仅是存储引用本身。
1) 任何人都可以确认是这种情况,或者可能详细说明吗?
2) 我有一种感觉,如果我被允许做foo.Controls.Add(ref bar);,它会显示“2”,但显然这种语法是非法的。是否有可能在没有重大重构的情况下出现这种情况?
【问题讨论】:
标签: c# asp.net pointers reference