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
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
_Original von herbivore_Die genauen Zusammenhänge sind noch etwas komplizierter
darum ist es auch interessant 🙂
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
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