Home
Browsez les 647 exemples
Téléchargez les 647 exemples
Téléchargez des chapitres
Achetez sur amazon.fr

Niveau: Débutant/Intermédiaire
ISBN-2-84177-339-6
50 Euros

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 doubleDistance 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