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;
        }
    }
}

results matching ""

    No results matching ""