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:
-
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,doublelaint). 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" -
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
intladouble.// 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ănulldacă 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ătruesaufalse. Î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 }