Junior
Welke soorten typeconversies zijn er in C#?
sobes.tech AI
Antwoord van AI
In C# zijn er twee hoofdtypen typeconversies: expliciet en impliciet.
Impliciete (Implicit) typeconversie
Gebeurdt automatisch wanneer de compiler zeker is dat de conversie veilig is en geen gegevensverlies zal veroorzaken. Bijvoorbeeld van een type met een kleiner bereik naar een type met een groter bereik.
// Impliciete conversie van int naar long
int i = 100;
long l = i;
Expliciete (Explicit) typeconversie
Vereist dat je in de code de conversie-operator ((type)) aangeeft en wordt gebruikt wanneer de conversie kan leiden tot gegevensverlies of een uitzondering kan veroorzaken. Het is nodig bij het converteren van een type met een groter bereik naar een kleiner bereik of tussen niet-gerelateerde types.
// Expliciete conversie van double naar int
double d = 123.45;
int i = (int)d; // Het decimale deel wordt verworpen
// Expliciete conversie van object naar string
object obj = "Hello";
string s = (string)obj;
// Gebruik van de operators as en is
object objAs = "World";
string sAs = objAs as string; // Geeft null terug als conversie niet mogelijk is
if (objAs is string) // Controleert of het object van het type string is
{
string sIs = (string)objAs;
}
Vergelijking van expliciete conversie, as en is
| Operatie | Beschrijving | Fout bij mislukking |
|---|---|---|
(Type) uitdrukking |
Expliciete conversie. Vereist exacte overeenstemming van het type. | InvalidCastException |
uitdrukking as Type |
Probeert het type te converteren. Werkt alleen voor referentietypes en types die null toestaan. | Geeft null terug |
uitdrukking is Type |
Controleert of de uitdrukking kan worden geconverteerd naar het opgegeven type. | Booleaanse waarde (true/false) |
Aangepaste conversies
De ontwikkelaar kan eigen expliciete en impliciete operatoren voor aangepaste types definiëren, met behulp van de sleutelwoorden implicit en explicit.
// Voorbeeld van een aangepaste impliciete conversie
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; }
}
// Gebruik
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Impliciete conversie
// Voorbeeld van een aangepaste expliciete conversie
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) };
}
}
// Gebruik
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Expliciete conversie