Sobes.tech
Junior

Ποιοι τύποι μετατροπής τύπων υπάρχουν σε C#;

sobes.tech AI

Απάντηση από AI

Στη C#, υπάρχουν δύο βασικοί τύποι μετατροπής τύπων:

  1. 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"
    
  2. 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
    }