Junior
Milyen típusátalakítási típusok léteznek C#-ban?
sobes.tech MI
Válasz az MI-től
A C#-ban két fő típuskonverziós mód létezik: explicit és implicit.
Implicit típuskonverzió
Automatikusan történik, amikor a fordító biztos abban, hogy a konverzió biztonságos, és nem fog adatvesztést okozni. Például kisebb értéktartományú típusból nagyobb értéktartományú típusba.
// Implicit típuskonverzió int-ről long-ra
int i = 100;
long l = i;
Explicit típuskonverzió
A kódba kell írni a konverziós operátort ((típus)), és akkor használjuk, amikor a konverzió adatvesztést okozhat vagy kivételt válthat ki. Szükséges nagyobb tartományú típusból kisebbre vagy nem összefüggő típusok között.
// Explicit típuskonverzió double-ról int-re
double d = 123.45;
int i = (int)d; // A törtrészt levágja
// Explicit típuskonverzió object-ről string-re
object obj = "Hello";
string s = (string)obj;
// Konverzió as és is operátorokkal
object objAs = "World";
string sAs = objAs as string; // null-t ad, ha nem lehetséges a konverzió
if (objAs is string) // Ellenőrzi, hogy az objektum string típusú-e
{
string sIs = (string)objAs;
}
Az explicit konverzió, az as és az is összehasonlítása
| Művelet | Leírás | Hibalehetőség |
|---|---|---|
(Típus) kifejezés |
Explicit konverzió. Pontos típusmegfelelés szükséges. | InvalidCastException |
kifejezés as Típus |
Megpróbálja konvertálni a típust. Csak referencia típusokra és null értéket elfogadó típusokra működik. | null-t ad vissza |
kifejezés is Típus |
Ellenőrzi, hogy a kifejezés konvertálható-e a megadott típusra. | Boolean érték (true/false) |
Egyedi típuskonverziók
A fejlesztő saját explicit és implicit konverziós operátorokat definiálhat a implicit és explicit kulcsszavak segítségével.
// Egyedi implicit konverzió példája
public class Inches
{
public int Value { get; set; }
public static implicit operator Millimeters(Inches i)
{
return new Millimeters { Value = i.Value * 25 };
}
}
public class Millimeters
{
public int Value { get; set; }
}
// Használat
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Implicit konverzió
// Egyedi explicit konverzió példája
public class Kilograms
{
public int Value { get; set; }
}
public class Pounds
{
public int Value { get; set; }
public static explicit operator Kilograms(Pounds p)
{
return new Kilograms { Value = (int)(p.Value / 2.20462) };
}
}
// Használat
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Explicit konverzió