在使用Remoting時,對象比較需要注意的

前幾天做一個小程序時,需要使用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如何比較兩個對象是否相等才行。

你可能感兴趣的:(in)