Всегда ли приведение объекта в C # возвращает ссылку на исходный объект

В настоящее время я делаю проект на C #, работающий с формами Windows. В ходе этого я сделал следующее

        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); 
    }

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

Теперь все это хорошо, за исключением того, что когда я это компилирую, я понимаю, что столкнулся с проблемой. hider - это его уникальный объект, являющийся возвратом от ((кнопки) отправителя). Это не обязательно ссылка на отправителя, и этот код, вероятно, ничего не сделает.

Но низко и вот, это работает точно так, как я хотел, и первоначально думал, что это будет. Что заставило меня задуматься: всегда ли актеры возвращают ссылку на исходный объект? Если нет, как я могу гарантировать, что (кнопка) отправитель = отправитель?

Я знаю, что дело не в двойных / целых, так как

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

в конечном итоге получается 11, а b 10,5. Но это может быть связано с тем, что структуры типа double / ints являются. Это поведение меня беспокоит, и было бы приятно узнать, что оно всегда будет возвращать ссылку, чтобы я мог успокоить свой беспокойный ум.

Ответы на вопрос(2)

Ваш ответ на вопрос