Was ist ein Implizit und ein Explizit in C# ?
Habe schon nachgeschaut und weiss, dass es mit Datenumwandlungen geht. Trotzdem verstehe ich das nicht ganz 100%.
Sehr gerne noch mit Beispielen erklären :)
Vielen Dank schon im Voraus
2 Antworten
Also das es verschiedene Datentypen gibt das weißt du ja, in einem int kann mehr gespeichert werden als in einem short zum Beispiel.
Implizit wird konvertiert wenn zum Beispiel ein int gefordert ist aber du einen short eingibst, da der Wertebereich von einem Short kleiner ist als von einem int und somit der int auch jeden möglichen Wert vom short speichern kann, muss man nicht nochmal explizit Konvertieren.
Explizit konvertiert wird genau dann du z.B einen String wie einen Int benutzen möchtest, bzw genau dann wenn das oben genannte Szenario nicht eintritt. Wenn also der Zieldatentyp Potenziel bestimmte sachen gar nicht speichern könnte oder Der Wertebereich kleiner ist als vom Eingabe Datentyp.
Das Wort implizit deutet an, dass etwas automatisch im Hintergrund / nicht sichtbar für dich Entwickler passiert. Das sind eindeutige Operationen, die der Compiler selbst durchführen kann, ohne dass er dafür deinen Rat braucht.
Ein einfaches Beispiel:
int number = 0;
byte otherNumber = 2;
number += otherNumber;
In der dritten Zeile wird implizit ein Typecast durchgeführt. Der byte-Wert wird zum int. In Langform:
number = number + (int)otherNumber;
Da bei so einem Typecast der Wert nicht an Präzision verliert, kann er vom Compiler auch implizit durchgeführt werden.
Ein anderes Beispiel ist Typinterferenz:
var myHome = new House();
Hier ermittelt der Compiler selbstständig anhand des R-Werts, welchen Typ myHome hat. Du als Entwickler kannst es dir leicht machen und brauchst nur var schreiben.
Weitere Beispiele impliziter Operationen findest du noch in anderen Kontexten, bspw. im Zusammenhang mit Generics und Typinterferenz.
Bei expliziten Operationen hingegen gibst du sprachlich / im Code eindeutig an, was du möchtest.
Beispiel:
int number = (int)3.2f;
In der Zeile wird ein expliziter Typecast durchgeführt. Der Compiler würde diese Operation nicht implizit durchführen, denn immerhin säbelst du bei dem Cast auch die Nachkommastelle ab (veränderst den Wert also erheblich).
Gehört dann Convert.ToInt32 zum Beispiel zu Explizit?