-
-
Save Fhernd/c86dbfdc466b34d79acc2d944e0e8d74 to your computer and use it in GitHub Desktop.
Demostración de la implementación de las interfaces IComparable y sobrecarga de operadores de comparación de orden < y >. [OritzOL]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment