Junior
Aké druhy konverzie typov existujú v C#?
sobes.tech AI
Odpoveď od AI
V jazyku C# existujú dva hlavné spôsoby prevodu typov: explicitný a implicitný.
Implicitný prevod
Prebieha automaticky, keď prekladač je presvedčený, že prevod je bezpečný a nezpôsobí stratu údajov. Napríklad z typu s menším rozsahom hodnôt na typ s väčším.
// Implicitný prevod int na long
int i = 100;
long l = i;
Explicitný prevod
Vyžaduje uvedenie operátora prevodu ((typ)) v kóde a používa sa, keď prevod môže viesť ku strate údajov alebo vyvolať výnimku. Je potrebný pri prevode z typu s väčším rozsahom hodnôt na typ s menším alebo medzi nesúvisiacimi typmi.
// Explicitný prevod double na int
double d = 123.45;
int i = (int)d; // Zlomková časť je zahodená
// Explicitný prevod object na string
object obj = "Hello";
string s = (string)obj;
// Použitie operátorov as a is
object objAs = "World";
string sAs = objAs as string; // vráti null, ak prevod nie je možný
if (objAs is string) // Kontroluje, či je objekt typu string
{
string sIs = (string)objAs;
}
Porovnanie explicitného prevodu, as a is
| Operácia | Popis | Chyba pri neúspechu |
|---|---|---|
(Typ) výraz |
Explicitný prevod. Vyžaduje presnú zhodu typu. | InvalidCastException |
výraz as Typ |
Pokúša sa previesť typ. Funguje iba pre referenčné typy a typy, ktoré umožňujú null. | vráti null |
výraz is Typ |
Kontroluje, či je možné výraz previesť na daný typ. | Boolean hodnota (true/false) |
Používateľské prevody
Vývojár môže definovať vlastné explicitné a implicitné operátory prevodu pre vlastné typy pomocou kľúčových slov implicit a explicit.
// Príklad používateľského implicitného prevodu
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; }
}
// Použitie
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Implicitný prevod
// Príklad používateľského explicitného prevodu
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) };
}
}
// Použitie
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Explicitný prevod