Sobes.tech
Junior

Ce tipuri de conversie de tipuri există în C#?

sobes.tech AI

Răspuns de la AI

În C#, există două tipuri principale de conversie a tipurilor:

  1. Conversie explicită (Explicit conversion): Necesită utilizarea operatorului (tip). Se folosește atunci când compilatorul nu poate efectua în mod sigur conversia automat, de exemplu, la conversia de la o clasă de bază la o clasă derivată sau de la un tip cu precizie mai mare la unul cu precizie mai mică (de exemplu, double la int). Poate duce la pierderea datelor sau la erori în timpul execuției (InvalidCastException).

    // Conversie explicită de la double la int
    double d = 123.45;
    int i = (int)d; // i va fi egal cu 123
    
    // Conversie a unui obiect la un tip specific
    object obj = "Hello";
    string s = (string)obj; // s va fi "Hello"
    
  2. Conversie implicită (Implicit conversion): Se realizează automat de către compilator atunci când conversia este cunoscută și sigură, adică fără pierdere de date. De exemplu, conversia de la int la double.

    // Conversie implicită de la int la double
    int x = 10;
    double y = x; // y va fi 10.0
    
    // Conversie implicită de la o clasă derivată la o clasă de bază
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Conversie implicită
    

De asemenea, există operatorii as și is, care sunt, de asemenea, legate de conversia tipurilor, dar cu caracteristici specifice:

  • Operatorul as: Efectuează conversia de tip dacă este posibil și returnează null dacă nu reușește. Nu generează excepția InvalidCastException. Se folosește doar cu tipuri de referință și tipuri Nullable.

    // Utilizarea operatorului `as`
    object obj2 = "World";
    string s2 = obj2 as string; // s2 va fi "World"
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 va fi null
    
  • Operatorul is: Verifică dacă un obiect este o instanță a unui anumit tip sau a unui tip derivat. Returnează true sau false. În cele mai recente versiuni de C# poate fi folosit cu pattern matching pentru a verifica și a face conversia în același timp.

    // Utilizarea operatorului `is` pentru verificarea tipului
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Acțiuni dacă obiectul este un șir de caractere
    }
    
    // Utilizarea `is` cu pattern matching
    if (obj4 is string str)
    {
        // str este disponibil aici ca șir de caractere
    }