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
Seite 1 von 3  1 23      
-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.063 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 19:41
Der Sinn (oder zumindest ein großer Vorteil) ist, dass du mittels boxing eine generische Klasse/Funktion schreiben kannst, die wirklich alle Typen unterstützt.
Einer Funktion, die einen Object Parameter erwartet, kann also wirklich alles übergeben werden. Und diese kann dann auch auf ihren Parameter .toString() aufrufen, da diese Funktion ja in object deklariert ist.

Eine List<int> und eine List<double> benutzen also die gleiche List<T> wie List<String> oder List<StringBuilder>

Genaueres können dir bestimmt Phoenix oder Elvis erzählen, die kennen sich noch besser mit .net aus
  Mit Zitat antworten Zitat
-187-

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

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 19:45
Der Sinn (oder zumindest ein großer Vorteil) ist, dass du mittels boxing eine generische Klasse/Funktion schreiben kannst, die wirklich alle Typen unterstützt.
Okay das macht schonmal Sinn

Und diese kann dann auch auf ihren Parameter .toString() aufrufen, da diese Funktion ja in object deklariert ist.
Ich kann auch wie folgt zugreifen:

Delphi-Quellcode:
int i = 0;
string s = i.ToString();

Eine List<int> und eine List<double> benutzen also die gleiche List<T> wie List<String> oder List<StringBuilder>
Das hab ich nicht verstanden ?
  Mit Zitat antworten Zitat
SebE

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

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 19:49
Ich habe mir das mit dem Boxing nicht so heftig/blöd vorgestellt.

http://social.msdn.microsoft.com/For...-1072384266dd/
Sowas sollte man doch verbieten, oder?
Sebastian
  Mit Zitat antworten Zitat
SebE

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

AW: Heap und Stack - Unterschiede

  Alt 25. Aug 2011, 19:53
Ich kann auch wie folgt zugreifen:

Delphi-Quellcode:
int i = 0;
string s = i.ToString();
Ich denke hier wird implizit das Boxing angewandt.
Es geht auch kürzer:
Code:
(5).ToString()
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 04:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz