Ποιοι τύποι μετατροπής τύπων υπάρχουν σε C#;
sobes.tech AI
Απάντηση από AI
Στη C#, υπάρχουν δύο βασικοί τύποι μετατροπής τύπων:
-
Explicit conversion (Ρητή μετατροπή): Απαιτεί τη χρήση του τελεστή
(τύπος). Χρησιμοποιείται όταν ο μεταγλωττιστής δεν μπορεί να πραγματοποιήσει με ασφάλεια τη μετατροπή αυτόματα, π.χ., κατά τη μετατροπή από μια βασική κλάση σε μια παράγωγη ή από έναν τύπο με μεγαλύτερη ακρίβεια σε έναν με μικρότερη (π.χ.,doubleσεint). Αυτό μπορεί να οδηγήσει σε απώλεια δεδομένων ή σφάλματα κατά την εκτέλεση (InvalidCastException).// Ρητή μετατροπή από double σε int double d = 123.45; int i = (int)d; // i θα είναι 123 // Μετατροπή αντικειμένου σε συγκεκριμένο τύπο object obj = "Hello"; string s = (string)obj; // s θα είναι "Hello" -
Implicit conversion (Ανέπαφη μετατροπή): Εκτελείται αυτόματα από τον μεταγλωττιστή όταν η μετατροπή είναι γνωστή και ασφαλής, δηλαδή χωρίς απώλεια δεδομένων. Για παράδειγμα, η μετατροπή από
intσεdouble.// Ανέπαφη μετατροπή από int σε double int x = 10; double y = x; // y θα είναι 10.0 // Ανέπαφη μετατροπή από μια παράγωγη κλάση σε μια βασική class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Ανέπαφη μετατροπή
Επιπλέον, υπάρχουν οι τελεστές as και is, που επίσης σχετίζονται με τη μετατροπή τύπων, αλλά με ιδιαιτερότητες:
-
Τελεστής
as: Εκτελεί τη μετατροπή τύπου, αν είναι δυνατή, και επιστρέφειnullαν αποτύχει. Δεν δημιουργεί εξαίρεση InvalidCastException. Χρησιμοποιείται μόνο με αναφορικούς τύπους και Nullable.// Χρήση του τελεστή `as` object obj2 = "World"; string s2 = obj2 as string; // s2 θα είναι "World" object obj3 = 123; string s3 = obj3 as string; // s3 θα είναι null -
Τελεστής
is: Ελέγχει αν ένα αντικείμενο είναι στιγμιότυπο ενός συγκεκριμένου τύπου ή τύπου που προέρχεται από αυτόν. Επιστρέφειtrueήfalse. Στις τελευταίες εκδόσεις C# μπορεί να χρησιμοποιηθεί με pattern matching για να ελέγξει και να πραγματοποιήσει ταυτόχρονα τη μετατροπή.// Χρήση του τελεστή `is` για έλεγχο τύπου object obj4 = "Example"; if (obj4 is string) { // Ενέργειες αν το αντικείμενο είναι string } // Χρήση του `is` με pattern matching if (obj4 is string str) { // το str είναι διαθέσιμο εδώ ως string }