Sobes.tech
Junior

Quels sont les types de conversions de types en C#?

sobes.tech IA

Réponse de l'IA

En C#, il existe deux principaux types de conversion de types:

  1. Conversion explicite (Explicit conversion) : Nécessite l'utilisation de l'opérateur de conversion (type). Utilisé lorsque le compilateur ne peut pas effectuer la conversion en toute sécurité automatiquement, par exemple lors de la conversion d'une classe de base à une classe dérivée ou d'un type avec une précision plus grande à un type avec une précision moindre (par exemple, double à int). Cela peut entraîner une perte de données ou une erreur à l'exécution (InvalidCastException).

    // Conversion explicite de double à int
    double d = 123.45;
    int i = (int)d; // i sera égal à 123
    
    // Conversion explicite d'un objet à un type spécifique
    object obj = "Hello";
    string s = (string)obj; // s sera égal à "Hello"
    
  2. Conversion implicite (Implicit conversion) : Effectuée automatiquement par le compilateur lorsque la conversion est connue et sûre, c'est-à-dire sans perte de données. Par exemple, convertir de int à double.

    // Conversion implicite de int à double
    int x = 10;
    double y = x; // y sera égal à 10.0
    
    // Conversion implicite d'une classe dérivée à une classe de base
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Conversion implicite
    

De plus, il existe les opérateurs as et is, qui sont également liés à la conversion de types, mais avec des caractéristiques spécifiques :

  • Opérateur as : Effectue la conversion de type si possible, sinon retourne null. Ne génère pas d'exception InvalidCastException. Utilisé uniquement avec des types de référence et des types Nullable.

    // Utilisation de l'opérateur as
    object obj2 = "World";
    string s2 = obj2 as string; // s2 sera égal à "World"
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 sera null
    
  • Opérateur is : Vérifie si un objet est une instance d'un type spécifique ou d'un type dérivé. Retourne true ou false. Dans les dernières versions de C#, il peut être utilisé avec des motifs (pattern matching) pour vérifier et faire une conversion en même temps.

    // Utilisation de l'opérateur is pour vérifier le type
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Actions si l'objet est une chaîne
    }
    
    // Utilisation de is avec motif (Pattern matching)
    if (obj4 is string str)
    {
        // str est accessible ici en tant que chaîne
    }