|
Exemple 11-40 extrait du chapitre Notions de classe et d'objet
Exemple 11-39< > Exemple 11-41
Cet exemple peut être compilé avec la ligne de commande: csc.exe /target:exe Exemple_11_40.cs Erreurs: 1 Avertissements: 0 Remarque:
Exemple_11_40.cs
public class Distance {
public double m_Mesure = 0.0;
public Distance(double d) { m_Mesure = d; }
public static implicit operator double( Distance d ) {
// Doit tenir compte du cas ou d est nulle.
if (object.ReferenceEquals(d, null))
return 0.0;
return d.m_Mesure;
}
public static explicit operator DistanceEntiere( Distance d ) {
if (object.ReferenceEquals(d, null))
// Vous pouvez aussi préférer retourner la référence
// nulle dans ce cas.
return new DistanceEntiere(0);
// Notez la nécessité de construire un nouvel objet pour un
// type destination référence.
return new DistanceEntiere((int)d.m_Mesure);
}
}
// Distance entière signifie que la distance est codée sur un entier.
public class DistanceEntiere {
public int m_Mesure = 0;
public DistanceEntiere(int i) { m_Mesure = i; }
}
class Program {
static void Main() {
Distance d1 = new Distance(5.3);
// OK le transtypage est implicite.
double dbl1 = d1;
// La forme explicite est aussi acceptée.
double dbl2 = (double)d1;
// Erreur de compilation!! : le transtypage doit être explicite.
DistanceEntiere de1 = d1;
// OK le transtypage est explicite.
DistanceEntiere de2 = (DistanceEntiere)d1;
// Teste le cas où la référence source est nulle.
Distance d2 = null;
double dbl3 = (double)d2;
DistanceEntiere de3 = (DistanceEntiere)d2;
}
}
Copyright Patrick Smacchia 2006 2007
|