Welke typen typeconversies zijn er in C#?
sobes.tech AI
Antwoord van AI
In C# zijn er twee hoofdtypen typeconversies:
-
Expliciete conversie (Explicit conversion): Vereist het gebruik van de operator
(type). Wordt gebruikt wanneer de compiler de conversie niet veilig automatisch kan uitvoeren, bijvoorbeeld bij het converteren van een basisklasse naar een afgeleide klasse of van een type met hogere precisie naar een met lagere precisie (bijvoorbeelddoublenaarint). Dit kan leiden tot gegevensverlies of runtime-fouten (InvalidCastException).// Expliciete conversie van double naar int double d = 123.45; int i = (int)d; // i wordt 123 // Object naar een specifiek type converteren object obj = "Hello"; string s = (string)obj; // s wordt "Hello" -
Impliciete conversie (Implicit conversion): Wordt automatisch door de compiler uitgevoerd wanneer de conversie bekend en veilig is, dat wil zeggen zonder gegevensverlies. Bijvoorbeeld, van
intnaardouble.// Impliciete conversie van int naar double int x = 10; double y = x; // y wordt 10.0 // Impliciete conversie van een afgeleide klasse naar een basisklasse class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Impliciete conversie
Daarnaast bestaan de operators as en is, die ook tot typeconversie behoren, maar met specifieke kenmerken:
-
Operator
as: Voert de conversie uit als dat mogelijk is, en geeftnullterug als de conversie niet lukt. Gooi geen InvalidCastException. Alleen te gebruiken met referentietypes en Nullable-types.// Gebruik van de operator `as` object obj2 = "World"; string s2 = obj2 as string; // s2 wordt "World" object obj3 = 123; string s3 = obj3 as string; // s3 wordt null -
Operator
is: Controleert of een object een instantie is van een bepaald type of een afgeleid type. Geefttrueoffalse. In de nieuwste versies van C# kan het worden gebruikt met pattern matching om gelijktijdig te controleren en te converteren.// Gebruik van de operator `is` voor typecontrole object obj4 = "Example"; if (obj4 is string) { // Acties als het object een string is } // Gebruik van `is` met pattern matching if (obj4 is string str) { // str is hier beschikbaar als string }