這兩個實體在記憶體分別儲存存在不同的位址,由此看來,這兩個實體的確
是不同的。
class Person
public Person(string _name,string _id)
}
Person 有兩個公開屬性,分別是 Name 與 ID。
如果程式如下:
Person p1=New Person("paladin","01");
Person p2=New Person("paladin","01");
這 p1 與 p2 ,雖然所傳入的值,都是 Name="paladin" ,ID="01",
但他們彼此卻是不相同的,可以透過以下的 Equals( )來知道。
p1.Equals(p2)
他會回傳 False。
然而,今天如果我們想要重新定義,只要是 Name 與 ID 相同,就要視
兩個實體為相同,可以嗎?
可以的,此時,可以透過覆寫 Equals( ) 來達成。
在 Person 類別裡,針對這個類別的 Equals( ) 方法進行覆寫,只要
Name 與 ID 相同,就視為相同的物件。
將 覆寫的程式描述如下:
public override bool Equals(object obj)
{
Person p = (Person)obj;
return p.Name == this.Name && p.ID == this.ID;
}
如此,執行 p1.Equals(p2) 時,
則會去比較 p2.Name 是否等於 p1.Name 且 p2.ID 是否等於 p1.ID ,
然後以此來回傳 Equals( ) 的值。
完整的 Person 的定義如下:
class Person
{
public string Name = string.Empty;
public string ID = string.Empty;
public Person(string _name,string _id)
{
Name = _name;
ID = _id;
}
public override bool Equals(object obj)
{
Person p = (Person)obj;
return p.Name == this.Name && p.ID == this.ID;
}
}
而在實際比較時,就可以發現,此時 p1.Equals(p2) 就會回傳 True 了
static void Main(string[] args)
{
Person p1 = new Person("paladin", "01");
Person p2 = new Person("paladin", "01");
Console.WriteLine(string.Format("p1 is the same with p2 ? {0}", p1.Equals(p2) ? "True" : "False"));
Console.ReadKey();
}
沒有留言:
張貼留言