Last active
July 29, 2016 19:22
-
-
Save Fhernd/784c5730ac62a9c696fa1193a92ea49f to your computer and use it in GitHub Desktop.
Demostración de la implementación de la interfaz IEquatable<T>. [OrtizOL]
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() | |
{ | |
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