Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Last active July 29, 2016 19:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fhernd/784c5730ac62a9c696fa1193a92ea49f to your computer and use it in GitHub Desktop.
Save Fhernd/784c5730ac62a9c696fa1193a92ea49f to your computer and use it in GitHub Desktop.
Demostración de la implementación de la interfaz IEquatable<T>. [OrtizOL]
void Main()
{
Area a1 = new Area(3, 2);
Area a2 = new Area(4, 5);
Area a3 = new Area(3, 2);
// Comprobaciones de igualdad:
Console.WriteLine(a1 == a2); // False
Console.WriteLine(a1 == a3); // True
Console.WriteLine(a3.Equals((object)a1)); // True
Console.WriteLine(a1.Equals((object)a3)); // True
}
// Define other methods and classes here
public struct Area : IEquatable<Area>
{
public readonly int Medida1;
public readonly int Medida2;
public Area(int m1, int m2)
{
Medida1 = Math.Min(m1, m2);
Medida2 = Math.Max(m1, m2);
}
// Sobrescribe el método Object.Equals:
public override bool Equals(object otroObj)
{
// Primero comprueba si el objeto encapsulado en
// `otroObj`
if (!(otroObj is Area))
{
return false;
}
// Invoca el método Equals que implementa
// esta clase:
return Equals((Area) otroObj);
}
// Implementación de IEquatable<Area>:
public bool Equals(Area otroObj)
{
return Medida1 == otroObj.Medida1
&& Medida2 == otroObj.Medida2;
}
public override int GetHashCode()
{
return Medida2 * 31 + Medida1;
}
// Sobrecarga el operador == para comprobar si dos
// objetos Area son iguales:
public static bool operator == (Area a1, Area a2)
{
return a1.Equals(a2);
}
// Sobrecarga el operador != para comprobar si dos
// objetos Area son distintos:
public static bool operator != (Area a1, Area a2)
{
return !a1.Equals(a2);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment