Проект ASP.NET 4.0 Webforms. У меня есть код в моем коде.Локальная переменная с тем же именем, что и переменная экземпляра = неожиданные результаты
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, но затем сразу же теряет его, когда этот метод завершается.
Может кто-нибудь объяснить мне такое поведение?
Как вы смотрите переменную экземпляра? Возможно, вы смотрите вместо локальной переменной? – Polyfun
Я думаю, что более вероятно, что вы либо смотрите на локальную переменную в отладчике, но не на переменную экземпляра, либо отладчик прослушивается и отображает значение из локальной переменной как значение переменной экземпляра. –
ReSharper дает предупреждения об этом, как и мой здравый смысл.После изучения поведения, пожалуйста, измените имя одного из них :-) –