【发布时间】:2012-04-25 00:11:24
【问题描述】:
ASP.NET 4.0 网络表单项目。我的代码隐藏中有以下内容。
public partial class _Default : System.Web.UI.Page
{
private string testVar;
protected override void OnInit(EventArgs e)
{
string testVar = "test";
}
protected void Page_Load(object sender, EventArgs e)
{
var whatsTheValue = testVar;
}
}
我在每个方法中都设置了一个断点。当局部变量testVar 设置在OnInit 中时,如果我快速查看实例变量,它也有值“test”。当我玩到Page_Load 时,实例变量的值为null。
我偶然遇到了这个问题,但这种行为让我感到困惑。我真的很惊讶它可以编译。我本来希望看到一些关于有两个同名变量的警告。话虽如此,让我更加困惑的是,实例变量在 OnInit 中获取了赋值,但在退出该方法时立即丢失了它。
有人可以向我解释这种行为吗?
【问题讨论】:
-
你是怎么看实例变量的?也许您正在查看局部变量?
-
我认为您更有可能在调试器中查看局部变量而不是实例变量,或者调试器被窃听并将局部变量的值显示为实例变量。
-
ReSharper 会就这类事情发出警告,就像我的常识一样。了解行为后,请更改其中之一的名称:-)
-
这纯粹是一个猜测,但我猜你看到的是调试器被混淆了。您是否尝试过插入 f.e.: String testVar2 = this.testVar;在 OnInit() 中?我的猜测是你仍然会看到 testVar2 为空。至于为什么会编译,有一个与实例变量同名的局部变量并不违法。
标签: c# instance-variables local-variables