Czy rzucanie obiektu w C # zawsze zwraca odwołanie do początkowego obiektu

Obecnie wykonuję projekt w C #, pracując z formularzami Windows. W trakcie tego robiłem co następuje

        void HideButtons(object sender, EventArgs e)
    {
        Button hider = ((Button)sender);
        foreach(Button tohide in hider.Parent.Controls)
            tohide.Hide();
        hider.Show();
        hider.Text = "UnHide";
        hider.Click -= new EventHandler(HideButtons);
        hider.Click += new EventHandler(ShowButtons); 
    }

Celem tego kodu jest posiadanie przycisku, który ukrywa wszystkie inne przyciski w pojemniku, z wyjątkiem samego siebie, a następnie zmienia się w przycisk Odkryj, który robi to samo w odwrotnej kolejności.

Teraz wszystko jest dobrze i dobrze, poza tym, że kompilując to, zdaję sobie sprawę, że mam problem. hider jest jego unikalnym obiektem, będącym zwrotem z ((Button) nadawcy). Niekoniecznie jest to odniesienie do nadawcy, a ten kod prawdopodobnie nie zrobi nic.

Ale nisko i dobrze, działa dokładnie tak, jak chciałem i początkowo myślałem, że tak. Co mnie zastanowiło, czy obsada zawsze zwraca odniesienie do oryginalnego obiektu? Jeśli nie, jak mogę zagwarantować, że (przycisk) nadawca = nadawca?

Wiem, że nie dotyczy to podwójnych / intów, jak

        public static int Main()
    {
        int a;
        double b;
        b = 10.5;
        a = (int)b;
        a++;
        return 0;
    }

kończy się na bycie 11, a b na 10,5 Ale może to być strukturą podwójnych / intów. To zachowanie mnie niepokoi i byłoby miło wiedzieć, że zawsze zwróci referencję, abym mógł umieścić mój zmartwiony umysł w spokoju.

questionAnswers(2)

yourAnswerToTheQuestion