public struct StructerPoint
{
public int x;
public int y;
public override bool Equals(object obj)
{
if (obj == null)//it can be ignore, because if the obj is null,(obj is StructerPoint) will return false.
return false;
if (!(obj is StructerPoint))//if obj is not StructerPoint Type ,obviuosly return flase
return false;
return Equals((StructerPoint)obj);//it have been ensure that it is StructerPoint Type at above codes,so this cast is safe and will not throw any exception
}
/// <summary>
/// this my strong type Equals mothed.if all the element have the same Tyep and value ,they can be considered equals.
/// </summary>
/// <param name="obj">an object is ensure StructerPoint type. </param>
/// <returns></returns>
public bool Equals(StructerPoint obj)
{
StructerPoint sp = obj;
if (!(this.x.Equals(sp.x)))
return false;
if (!(this.y.Equals(sp.y)))
return false;
return true;
}
}
//struct 类型的对象,隐式继承于Object.ValueType, Object.ValueType里有虚方法 public bool virsual Equals(Object obj)。
//所以在自定义的struct 类型 对象里,建议重写该方法,使得该方法返回期望的结果。
//这里还新定义自己的强类型的Equals 方法。两个Equals方法的不同之处,就是参数不同。
//重写的Equals方法的参数是一个object 类型的。自定义的强类型Equals方法的参数是StructerPoint 类型的。
//当我们调用Equals方法的时候,程序会根据参数类型决定调用哪一个方法。这其实就是重载的概念了。
//不要以为只有类才有重载,结构也有的。
//简单点讲,如果参数不是StructerPoint类型的,都将会调用 public override bool Equals(object obj)方法。
//public override bool Equals(object obj)方法 其实只是做了 判断参数为空和判断参数类型 两个操作。
//然后调用强类型的Equals方法。也可以将强类型的Equals方法的语句合并到重载的方法中,这看个人喜好了。
//但是这关乎到一个效率的问题。如果能判定参数是StructerPoint类型的话,直接调用public bool Equals(StructerPoint obj)
//效率会更高一点。
//也不知道我表达清楚没有...中文表达尚有问题,不敢用英文写...