Локальная переменная с тем же именем, что и у переменной экземпляра = неожиданные результаты.

Проект веб-форм 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, если я быстро просматриваю переменную экземпляра, она также имеет значение «тест». Когда я играю до Page_Load, значение переменной экземпляра равно null.

Я наткнулся на это случайно, но поведение меня сбивает с толку. Я на самом деле удивлен, что он компилируется. Я ожидал увидеть какое-то предупреждение о наличии двух переменных с одинаковыми именами. При этом меня еще больше сбивает с толку то, что переменная экземпляра получает назначение в OnInit, но затем сразу же теряет его при выходе из этого метода.

Кто-нибудь может объяснить мне такое поведение?

5
задан Jeremy Wiggins 12 April 2012 в 15:45
поделиться