Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- NotaMusical nm1 = new NotaMusical(1);
- NotaMusical nm2 = new NotaMusical(2);
- NotaMusical nm3 = new NotaMusical(1);
- Console.WriteLine("nm1 == nm2 : " + (nm1 == nm2));
- Console.WriteLine("nm1.Equals((object)nm2): " + nm1.Equals((object)nm2));
- Console.WriteLine("nm1 == nm3 : " + (nm1 == nm3));
- Console.WriteLine("nm1.Equals((object)nm2): " + nm1.Equals((object)nm3));
- Console.WriteLine("nm1 < nm2: " + (nm1 < nm2));
- Console.WriteLine("nm1 != nm2: " + (nm1 != nm2));
- }
- // Representa una nota musical:
- public struct NotaMusical : IComparable, IComparable<NotaMusical>, IEquatable<NotaMusical>
- {
- // Representa el semitono de A:
- int _semitonosDeA;
- // Recupera el semitono de A:
- public int SemitonosDeA
- {
- get
- {
- return _semitonosDeA;
- }
- }
- // Crea una nueva instancia con un semitono de A:
- public NotaMusical(int semitonosDeA)
- {
- _semitonosDeA = semitonosDeA;
- }
- // Implementa CompareTo de IComparable<NotaMusical>:
- public int CompareTo(NotaMusical otroObj)
- {
- if (Equals(otroObj))
- {
- return 0;
- }
- // Efectúa la comparación entre números enteros:
- return _semitonosDeA.CompareTo(otroObj._semitonosDeA);
- }
- // Implementa IComparable.CompareTo (versión no genérica):
- int IComparable.CompareTo(object otroObj)
- {
- if (!(otroObj is NotaMusical))
- {
- throw new InvalidOperationException(
- "CompareTo: `otroObj` no es un tipo NotaMusical");
- }
- return CompareTo((NotaMusical) otroObj);
- }
- // Sobrecarga el operador < para determinar la comparación de orden de un
- // semitono de A respecto a otro:
- public static bool operator <(NotaMusical nm1, NotaMusical nm2)
- {
- return nm1.CompareTo(nm2) < 0;
- }
- // Sobrecarga el operador > para determinar la comparación de orden de un
- // semitono de A respecto a otro:
- public static bool operator >(NotaMusical nm1, NotaMusical nm2)
- {
- return nm1.CompareTo(nm2) > 0;
- }
- // Implementación del método Equals de IEquatable<NotaMusical>:
- public bool Equals(NotaMusical otroObj)
- {
- return _semitonosDeA == otroObj._semitonosDeA;
- }
- // Sobrescribe Object.Equals:
- public override bool Equals(object otroObj)
- {
- if (!(otroObj is NotaMusical))
- {
- return false;
- }
- return Equals((NotaMusical)otroObj);
- }
- // Sobrescribe el método GetHashCode para calcular el hash
- // de una nota musical:
- public override int GetHashCode()
- {
- return _semitonosDeA.GetHashCode();
- }
- // Sobrecarga el operador == para efectuar una comparación de
- // igualdad entre dos objetos NotaMusical:
- public static bool operator ==(NotaMusical nm1, NotaMusical nm2)
- {
- return nm1.Equals(nm2);
- }
- // Sobrecarga el operador == para efectuar una comparación de
- // igualdad entre dos objetos NotaMusical:
- public static bool operator !=(NotaMusical nm1, NotaMusical nm2)
- {
- return !(nm1 == nm2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement