Felüldefiniálások

Filed Under (elmélet, kód) by nameless on 23-07-2009

ToString() Equals() GetHashCode() felüldefiniálása:

using System;
 
namespace Program
{
    class Person
    {
        public string fName;
        public string lName;
        public sbyte personAge;
 
        public Person(string firstName, string lastName, byte age)
        {
            fName = firstName;
            lName = lastName;
            personAge = (sbyte)age;
        }
        public Person() { }
 
        //fölülírjuk a ToStringet
        public override string ToString()
        {
            string myState;
            myState = String.Format("[First Name: {0}; Last Name: {1}; Age: {2}]", fName, lName, personAge);
            return myState;
        }
 
        //felüldefiniáljuk az Equalst
        public override bool Equals(object obj)
        {
            if (obj is Person && obj != null)
            {
                Person temp;
                temp = (Person)obj;
                if (temp.fName == this.fName && temp.lName == this.lName && temp.personAge == this.personAge)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            return false;
        }
        //visszaadja a ToString() érték alapján kiszámított hashértéket.
        public override int GetHashCode()
        {
            return this.ToString().GetHashCode();
        }
    }
 
    class EntryPoint
    {
        public static void Main()
        {
            //Az Equals() és a GetHashCode() teszteléséhez
            //ezeknek egyezniük kell.
            var p1 = new Person("Homer", "Simpson", 50);
            var p2 = new Person("Homer", "Simpson", 50);
 
            //Az objektum szöveges verziójának beolvasása
            Console.WriteLine("p1.ToString() {0}",p1.ToString());
            Console.WriteLine("p2.ToString() {0}", p2.ToString());
 
            //a felülbírált Equals() tesztelése
            Console.WriteLine("p1 = p2?: {0}", p1.Equals(p2));
 
            //a hashérték tesztelése.
            Console.WriteLine("Same hash codes?: {0}", p1.GetHashCode() == p2.GetHashCode());
            Console.WriteLine();
 
            //A p2 korának módosítása, és ismételt tesztelése.
            p2.personAge = 45;
            Console.WriteLine("p1.ToString() {0}", p1.ToString());
            Console.WriteLine("p2.ToString() {0}", p2.ToString());
            Console.WriteLine("p1 = p2?: {0}", p1.Equals(p2));
            Console.WriteLine("Same hash codes?: {0}", p1.GetHashCode() == p2.GetHashCode());
            Console.WriteLine();
 
 
            Console.ReadKey();
        }
    }
}

Post a comment