В настоящее время я делаю проект на С#, работая с формами 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 — его уникальный объект, возвращаемый отправителем ((Button)). Это не обязательно ссылка на отправителя, и этот код, вероятно, ничего не сделает.
Но вот, он работает именно так, как я хотел и изначально думал, что так и будет. Что заставило меня задуматься, всегда ли приведение возвращает ссылку на исходный объект? Если нет, как я могу гарантировать, что (кнопка) отправитель = отправитель?
Я знаю, что это не относится к двойным/целым числам, так как
public static int Main()
{
int a;
double b;
b = 10.5;
a = (int)b;
a++;
return 0;
}
заканчивается тем, что a равно 11, а b равно 10,5. Но это может быть связано с тем, что double/ints являются структурами. Такое поведение беспокоит меня, и было бы неплохо знать, что оно всегда будет возвращать ссылку, чтобы я мог успокоиться.