IEquatable接口

最近在看MVP(Mode View Presenter),看到在Country类中看到一个接口,呵呵,没有用过,所以写一个随笔,略研究一下。以下就是了解过的结果。
//IEquatable Readme
    
//The IEquatable.Equals method is very similar to Object.Equals. However, IEquatable.Equals is type-safe and generic—requiring no boxing and unboxing. 
    
//IEquatable.Equals方法非常类似于Object.Equals,然而IEquatable.Equals是安全类型和类,不需要装箱和拆箱。

    
//At first glance, the IEquatable interface appears very similar to the IComparable interface.
    
//乍看,IEquatable 接口显现非常类似于IComparable接口。
    
//But, whereas IEquatable returns a bool representing only whether the instances are equal or not, IComparable returns an int indicating how the instances differ—whether smaller, equal or larger. 
    
//但是 然而IEquatable 返回一个布尔表示这个实例是否相等,IComparable返回一个整型,这个实例不同于是否是Smaller,Equal,Larger.

    
class Program
    
{
        
static void Main(string[] args)
        
{
            Vector va 
= new Vector(1.5,1.5,1.5);
            Vector vb 
= new Vector(1.5,1.5,1.5);
            
            
//The reason for the first result is because the == compares the value stored in the variables myVA and myVB. 
            
//Because these represent instances of classes they are reference types, 
            
//so the values are memory addresses of where the actual object is stored in the heap. 
            
//Therefore they can never be identical unless they actually point to the same object. 

            
if(va == vb)
            
{
                Console.WriteLine(
"va == vb");
            }

            
else
            
{
                Console.WriteLine(
"va != vb");
            }


            
///The second result is from the Equals() method, this returns the correct result as the class has compared the actual values. 
            if(va.Equals(vb))
            
{
                Console.WriteLine(
"va == vb IEquatable");
            }

            
else
            
{
                Console.WriteLine(
"va != vb IEquatable");
            }

        }

    }

    
    
    
class Vector : IEquatable<Vector>
    
{
        
private double x;

        
public double getX()
        
{
            
return x;
        }


        
private double y;

        
public double getY()
        
{
            
return y;
        }


        
private double z;

        
public double getZ()
        
{
            
return z;
        }


        
public Vector(double x, double y, double z)
        
{
            
this.x = x;
            
this.y = y;
            
this.z = z;
        }


        
IEquatable Members
    }
原文地址:https://www.cnblogs.com/RuiLei/p/879943.html