Sobes.tech
Junior

Welke typen typeconversies zijn er in C#?

sobes.tech AI

Antwoord van AI

In C# zijn er twee hoofdtypen typeconversies:

  1. 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 (bijvoorbeeld double naar int). 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"
    
  2. Impliciete conversie (Implicit conversion): Wordt automatisch door de compiler uitgevoerd wanneer de conversie bekend en veilig is, dat wil zeggen zonder gegevensverlies. Bijvoorbeeld, van int naar double.

    // 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 geeft null terug 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. Geeft true of false. 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
    }