Pour commencer, précisons que C# ne permet pas (contrairement à VB) des conversions implicites avec perte de précision. Par contre, C# autorise les conversions implicites si le type destinataire peut s’accomodé de toutes les valeurs du type source. Ceci est appelé une “widening conversion”.
Voici un exemple de “widening conversion” :
int i = 1;
double d = 1.000001;
d = i ; // convertion OK
Si le type source à un range et une précision plus grande que celle du destinataire on parle alors de “norrowing conversion”. Ceci requiert une conversion explicite. Ce type de conversion est source d’erreur si la valeur source dépasse le range du type destinataire. Dans ce cas, si la conversion entre ces types n’est pas définie, vous recevrez une erreur de compilation.
Autre type de casting donc, le norrowing conversion :
double d = 1.000001;
int i = 1;
i = int (d);
Boxing : C’est convertir un type valeur (int, double, float,…) en un type référence. Ci-dessous nous convertissons un int (type valeur) en un objet (type référence).
int i = 124;
object o = (object) i ;
UnBoxing : C’est convertir un type objet en un type valeur. Convertir un objet en int.
object o = 123;
int i = (int)o;
La pratique du Boxing et de l’Unboxing est assez coûteux en performance et vous devriez éviter de l’utiliser trop souvent à l’intérieur de tâches répétitives. Le boxing intervient également lorsque l’on appele une méthode virtuel d’une structure ou d’un type valeur qui hérite de System.Objet, comme ToString(). Les conseils suivant évitent les boxing non-nécessaires
Comment implémenter la conversion pour un type personnalisé ?
Vous pouvez également définir les opérations implicit et explicit pour vos classes personnalisées, de cette manière vous autoriserez le casting (widening et narrowing) pour vos classes.
Voici un exemple d’implémentation de casting pour une classe personnalisée :

Et l’implémentation :

J’espère que ses explications vous serviront à mieux comprendre les conversions en C#. Si vous avez des remarques, n’hésitez-pas à m’en faire part.