AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Boxing und Unboxing in C#

Ein Thema von -187- · begonnen am 25. Aug 2011 · letzter Beitrag vom 26. Aug 2011
Antwort Antwort
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#1

Boxing und Unboxing in C#

  Alt 25. Aug 2011, 18:15
Hmm ich möchte hier nochmal anknüpfen. Und zwar habe ich grad etwas über Boxing und Unboxing in C# gelesen. Wie es funktioniert habe ich verstanden. Eine Integer Variable (Wertetyp) kann zu einem Object (Referenztyp) "konvertiert" werden.

Das würde in C# so aussehen:

Delphi-Quellcode:
            int i = 321;
            object o = i; //boxed
Jetzt habe ich aus einer Wertetyp Variable eine Referenztyp Variable gemacht. Aber warum ? Ich seh den Vorteil nicht, kann es jemand Anhand eines Beispiels erklären?

Dankeschön
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#2

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 18:38
Das Einzige, was ich mir da vorstellen kann, daß man unterschiedliche Wert-Typen in der Objektvariable unterbringen kann.
Und am Ende könnte man über Typprüfungen unterscheiden was für Werte enthalten sind.

quasi Currency, Integer, Int64, Float oder sonstwas.

Vielleicht auch, um einen Wert irgendwo unterzubringen, wo sonst nur ein Objekt reinpaßt?
Also das Umgekehrte, wie man im Delphi alles Mögliche in einen Integer/Pointer reincastet.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#3

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 18:52
Wenn man eine Referenz auf einen Integer braucht und nicht den Integer selbst.
Pointer gibbet in C# ja so nicht (unsafe ausgenommen)

(dein Integer "wandert" also vom Stack in den Heap)
Sebastian
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#4

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 18:55
Ich bin neu in der .NET Programmierung aber ich arbeite hin und wieder mit Delphi. Eine Referenz auf eine Variable hab ich bisher nie gebraucht deswegen die Frage: Warum bzw. wann braucht man sowas? Beispiel ?
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#5

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 18:58
Delphi-Quellcode:
var
  i, j: integer;

i := 5;
j := i;
i := 10;

// i = 10, j = 5
Wenn es darauf ankommt, dass j IMMER den selben Wert hat wie i, dann brauchst du einen Zeiger.

Delphi-Quellcode:
var
  i: integer;
  j: ^integer;

i := 5;
j := @i;
i := 10;

// i = 10, j^ = 10
Hinweis: hier (Delphi-Beispiel) wandert nichts in den Heap!
Sebastian

Geändert von SebE (25. Aug 2011 um 19:59 Uhr)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 19:20
Hmm aber mein Code funktioniert doch so:

i wird als Integer deklariert und mit einer Zahl initialisiert. (i liegt auf dem Stack)
o wird als Objekt deklariert. Ein neues Objekt wird auf dem Heap erstellt und der Inhalt von i wird in das Objekt kopiert. o liegt auf dem Stack und verweist auf das Objekt.

Da es sich bei o um eine Referenz auf ein Objekt, welches eine Kopie von i ist, handelt, wird sich bei Änderung von i, o nicht verändern.

Jedenfalls habe ich das so verstanden ...


Delphi-Quellcode:
            int i = 321;
            object o = i; //boxed
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz