Advertisement
Fhernd

NotaMusical.cs

Jul 31st, 2016
18,427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.32 KB | None | 0 0
  1. void Main()
  2. {
  3.     NotaMusical nm1 = new NotaMusical(1);
  4.     NotaMusical nm2 = new NotaMusical(2);
  5.     NotaMusical nm3 = new NotaMusical(1);
  6.    
  7.     Console.WriteLine("nm1 == nm2 :                  " + (nm1 == nm2));
  8.     Console.WriteLine("nm1.Equals((object)nm2): " + nm1.Equals((object)nm2));
  9.     Console.WriteLine("nm1 == nm3 :                  " + (nm1 == nm3));
  10.     Console.WriteLine("nm1.Equals((object)nm2): " + nm1.Equals((object)nm3));
  11.     Console.WriteLine("nm1 < nm2:                     " + (nm1 < nm2));
  12.     Console.WriteLine("nm1 != nm2:                   " + (nm1 != nm2));
  13. }
  14.  
  15. // Representa una nota musical:
  16. public struct NotaMusical : IComparable, IComparable<NotaMusical>, IEquatable<NotaMusical>
  17. {
  18.     // Representa el semitono de A:
  19.     int _semitonosDeA;
  20.    
  21.     // Recupera el semitono de A:
  22.     public int SemitonosDeA
  23.     {
  24.         get
  25.         {
  26.             return _semitonosDeA;
  27.         }
  28.     }
  29.  
  30.     // Crea una nueva instancia con un semitono de A:
  31.     public NotaMusical(int semitonosDeA)
  32.     {
  33.         _semitonosDeA = semitonosDeA;
  34.     }
  35.  
  36.     // Implementa CompareTo de IComparable<NotaMusical>:
  37.     public int CompareTo(NotaMusical otroObj)
  38.     {
  39.         if (Equals(otroObj))
  40.         {
  41.             return 0;
  42.         }
  43.        
  44.         // Efectúa la comparación entre números enteros:
  45.         return _semitonosDeA.CompareTo(otroObj._semitonosDeA);
  46.     }
  47.  
  48.     // Implementa IComparable.CompareTo (versión no genérica):
  49.     int IComparable.CompareTo(object otroObj)
  50.     {
  51.         if (!(otroObj is NotaMusical))
  52.         {
  53.             throw new InvalidOperationException(
  54.                 "CompareTo: `otroObj` no es un tipo NotaMusical");
  55.         }
  56.        
  57.         return CompareTo((NotaMusical) otroObj);
  58.     }
  59.  
  60.     // Sobrecarga el operador < para determinar la comparación de orden de un
  61.     // semitono de A respecto a otro:
  62.     public static bool operator <(NotaMusical nm1, NotaMusical nm2)
  63.     {
  64.         return nm1.CompareTo(nm2) < 0;
  65.     }
  66.  
  67.     // Sobrecarga el operador > para determinar la comparación de orden de un
  68.     // semitono de A respecto a otro:
  69.     public static bool operator >(NotaMusical nm1, NotaMusical nm2)
  70.     {
  71.         return nm1.CompareTo(nm2) > 0;
  72.     }
  73.  
  74.     // Implementación del método Equals de IEquatable<NotaMusical>:
  75.     public bool Equals(NotaMusical otroObj)
  76.     {
  77.         return _semitonosDeA == otroObj._semitonosDeA;
  78.     }
  79.  
  80.     // Sobrescribe Object.Equals:
  81.     public override bool Equals(object otroObj)
  82.     {
  83.         if (!(otroObj is NotaMusical))
  84.         {
  85.             return false;
  86.         }
  87.        
  88.         return Equals((NotaMusical)otroObj);
  89.     }
  90.  
  91.     // Sobrescribe el método GetHashCode para calcular el hash
  92.     // de una nota musical:
  93.     public override int GetHashCode()
  94.     {
  95.         return _semitonosDeA.GetHashCode();
  96.     }
  97.  
  98.     // Sobrecarga el operador == para efectuar una comparación de
  99.     // igualdad entre dos objetos NotaMusical:
  100.     public static bool operator ==(NotaMusical nm1, NotaMusical nm2)
  101.     {
  102.         return nm1.Equals(nm2);
  103.     }
  104.  
  105.     // Sobrecarga el operador == para efectuar una comparación de
  106.     // igualdad entre dos objetos NotaMusical:
  107.     public static bool operator !=(NotaMusical nm1, NotaMusical nm2)
  108.     {
  109.         return !(nm1 == nm2);
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement