Actualmente estoy haciendo un proyecto en C# trabajando con formularios de Windows. Durante el transcurso de la misma, hice lo siguiente¿El lanzamiento de un objeto en C# siempre devuelve una referencia al objeto inicial?
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);
}
El propósito de este código es tener un botón que oculta todos los otros botones en el contenedor está en excepto a sí misma, y luego convertirse en un botón en Mostrar lo que hace lo mismo en reversa
Ahora, eso está muy bien, excepto que, mientras compilo esto, me doy cuenta de que me he topado con un problema. HIDER es su objeto único, que es el retorno de (remitente del botón). No es necesariamente la referencia al remitente, y este código probablemente no hará nada.
Pero bajo y, he aquí, funciona exactamente como yo quería y en un principio pensé que sería. Lo que me hizo preguntarme, ¿un reparto siempre devuelve una referencia al objeto original? De lo contrario, ¿cómo puedo garantizar que (botón) sender = sender?
sé que no es el caso para los dobles/enteros, como
public static int Main()
{
int a;
double b;
b = 10.5;
a = (int)b;
a++;
return 0;
}
termina con un ser 11, y siendo b 10,5 Pero eso puede ser debido a dobles/enteros son estructuras. Este comportamiento me preocupa, y sería bueno saber que siempre devolverá una referencia para que pueda poner mi mente preocupada a descansar.
Excelente pregunta. Aquí hay algunas notas sobre cuándo un yeso cambia la representación frente a la preservación de la identidad. Puede ser bastante confuso. http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –