Gibt das Umwandeln eines Objekts in C # immer einen Verweis auf das ursprüngliche Objekt zurück

Ich arbeite derzeit in C # an einem Projekt mit Windows Forms. Währenddessen habe ich Folgendes getan

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

Der Zweck dieses Codes besteht darin, eine Schaltfläche zu haben, die alle anderen Schaltflächen im Container, in dem sie sich befinden, außer sich selbst verbirgt, und dann in eine Schaltfläche zum Einblenden zu verwandeln, die dasselbe in umgekehrter Reihenfolge ausführt.

Nun, das ist alles schön und gut, außer wenn ich das kompiliere, merke ich, dass ich auf ein Problem gestoßen bin. hider ist sein einzigartiges Objekt, nämlich die Rückgabe vom ((Button) Absender). Es ist nicht unbedingt der Verweis auf den Absender, und dieser Code wird wahrscheinlich nichts bewirken.

Aber siehe da, es funktioniert genau so, wie ich es wollte und ursprünglich gedacht hatte. Wodurch habe ich mich gewundert, gibt eine Besetzung immer einen Verweis auf das ursprüngliche Objekt zurück? Wenn nicht, wie kann ich garantieren, dass (Button) Absender = Absender ist?

Ich weiß, dass dies bei Double / Ints nicht der Fall ist

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

Am Ende steht a für 11 und b für 10,5. Dies kann jedoch daran liegen, dass Doubles / Ints Strukturen sind. Dieses Verhalten beunruhigt mich und es wäre schön zu wissen, dass es immer einen Verweis zurückgibt, damit ich meinen besorgniserregenden Verstand zur Ruhe bringen kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage