前幾天做一個小程序時,需要使用Remoting,在服務器端維護一對像的數組,客戶端會通過Remoting使用服務器提供的方法對數組操作,程序原型如下:
對象:
public class Employe
{
private int _ID;
private string _Name;
public int ID
{
get{return this._ID;}
set{this._ID=value;}
}
public string Name
{
get{return this._Name;}
set{this._Name=value;}
}
}
服務器端有這一個組數:
List<Employe> Employes;
提供了如下方法:
RemoveEmploye(Employe employe);
具體實現為:
public RemoveEmploye(Employe employe)
{
Employes.Remove(employe);
}
程序看起來好像沒問題,可是在執行的時候,怎么也不能移除傳入的employe。
後來一想,客戶端的object怎么可能會和服務器的object相等呢?
在Employe類加上如下代碼即解決問題:
public override int GetHashCode()
{
return this.ID.GetHashCode ();
}
public override bool Equals(object obj)
{
return this.GetHashCode().Equals( (obj as Employe).GetHashCode());
}
原來,客戶端的object傳到服務器是要先經過Serializable再DeSerializable的,必須告訴.net如何比較兩個對象是否相等才行。