Override ToString()、GetHashCode()、Equals(object obj)
結論:只要Override Equals(object obj),一定要 Override GetHashCode()!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace OverrideDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("****** Override ToString() ******");
OverrideToStringDemo();
Console.WriteLine("****** Override GetHashCode() ******");
OverrideGetHashCodeDemo();
Console.WriteLine("****** Override Equals(object obj) ******");
OverrideEqualsDemo();
Console.ReadLine();
}
#region OverrideToStringDemo()
static void OverrideToStringDemo()
{
Gamer A = new Gamer();
A.Name = "王小明";
A.Age = 20;
Gamer B = new Gamer();
B.Name = "業大雄";
B.Age = 30;
Console.WriteLine("選手A" + A.ToString());
Console.WriteLine("選手B" + B.ToString());
}
#endregion
#region OverrideGetHashCodeDemo()
static void OverrideGetHashCodeDemo()
{
Gamer A = new Gamer();
A.Name = "王小明";
A.Age = 20;
Gamer B = new Gamer();
B.Name = "王小明";
B.Age = 20;
Console.WriteLine("A == B ? " + (A == B).ToString());
Console.WriteLine("A.Equals(B) ? " + A.Equals(B));
}
#endregion
#region OverrideEqualsDemo()
static void OverrideEqualsDemo()
{
Gamer A = new Gamer();
A.Name = "王小明";
A.Age = 20;
Gamer B = new Gamer();
B.Name = "王小明";
B.Age = 30;
Console.WriteLine("A.GetHashCode() ? " + A.GetHashCode());
Console.WriteLine("B.GetHashCode() ? " + B.GetHashCode());
}
#endregion
}
class Gamer
{
#region Property
public string Name { get; set; }
public int Age { get; set; }
#endregion
public override bool Equals(object obj)
{
if (obj is Gamer)
{
return Name == ((Gamer)obj).Name;
}
else
{
return false;
}
}
//只要Override Equals(object obj),一定要 Override GetHashCode()
public override int GetHashCode()
{
//回傳一個 Int32 型態的數值
return Name.GetHashCode();
}
public override string ToString()
{
return "名字:" + Name + " ; " + "年齡:" + Age;
}
}
}