Laden...

Typumwandlung von Objektvariablen

Erstellt von ben vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.106 Views
B
ben Themenstarter:in
200 Beiträge seit 2006
vor 16 Jahren
Typumwandlung von Objektvariablen

Hallo Community,

Bin ein paar Testprogramme am durchmachen und habe da zur Typumwandlung eine Verständnis-Frage:

openbook: C#
-> http://www.galileocomputing.de/openbook/visual_csharp/visual_csharp_06_005.htm

Implizite Typumwandlung:
<Basisklassenreferenz> = <Subklassenreferenz>

Beispiel:
Control control = new Control();
TextBox txtBox = new TextBox();
control = txtBox; //fehler

...soweit so gut, hab ich geschnallt...

Nun jetztig aber:

Explizite Typumwandlung:
long lngVar = 4711;
int intVar = (int)lngVar; //funktioniert
<Subklassenreferenz> = <Basisklassenreferenz>

Warum aber funktionert jetztig das gegenteil von oben nicht❔
Control control = new Control();
TextBox txtBox = new TextBox();
txtBox = (TextBox)control; //fehler
<Subklassenreferenz> = <Basisklassenreferenz>

Dies wiederum funktionert "komischerweise"(für mich zumindest noch) einwandfrei:
WebRequest objWebRequest = WebRequest.Create("http://");
HttpWebRequest objHttpRequest = (HttpWebRequest)HttpWebRequest.Create("http://");
objHttpRequest = (HttpWebRequest)objWebRequest; //funktioniert
<Subklassenreferenz> = <Basisklassenreferenz>

Wie weiss ich nun, was sich explizit umwandeln lässt und was nicht?

Wäre sehr dankbar, wenn mir da jemand etwas klarheit schaffen könnte.
thx & mfg

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo

Warum aber funktionert jetztig das gegenteil von oben nicht?

Das würde gehen:


Control control = new TextBox();
txtBox = (TextBox)control; //fehler

Ein Cast ist oft keine Umwandlung des Objekts, sondern nur des statischen Typs des Ausdrucks, der das Objekt liefert. Sprich durch den Cast wird nicht ein Control-Object in eine TextBox-Object umgewandelt, sondern es wird nur gesagt, dass die TextBox, die in der Control-Variablen gespeichert ist, auch statisch vom Typ TextBox betrachtet werden soll. Wenn in der Variablen ein Objekt enthalten ist, dass keine TextBox ist, dann geht der Cast schief. Man könnte auch sagen, dass eine Control-Variable in eine TextBox-Variable umgewandelt wird. Und das geht schief, wenn die TextBox-Variable ein Objekt enthält, dass nicht in einer TextBox-Variable enthalten sein darf.

Die genauen Zusammenhänge sind noch etwas komplizierter, aber für den Anfang, kann man das ruhig so sehen.

Siehe auch Casten aber richtig: Begriffe wie Cast / is / as

herbivore

563 Beiträge seit 2004
vor 16 Jahren

_Original von herbivore_Die genauen Zusammenhänge sind noch etwas komplizierter

darum ist es auch interessant 🙂

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo .unreal,

wen Casten im Allgemeinen interessiert, kann die genauen Zusammenhänge aus jedem guten C#-Buch erfahren. Hier ging es ja nur um die konkrete Frage, die ich beantwortet habe. 🙂

Grob gesagt: Allgemeine Fragen/allgemeines Interesse ==> Buch. Spezielle/spezifische Fragen ==> Forum.

herbivore

B
ben Themenstarter:in
200 Beiträge seit 2006
vor 16 Jahren

Danke für deine Bemühung herbivore.
Werde mir also noch ein Buch zutun "müssen", welches das Ganze etwas detailierter zeigt, als das openbook.

mfg ben