the Dead
جمعه 19 بهمن 1386, 02:48 صبح
هنگامی که در یک کلاس یک متد را Override میکنیم که خود اصل ان متد Override نمیشود و در صورت استفاده از کلاس اصلی متد (override نشده) مد نظر قائل خواهد بود. درسته؟
خوب حالا اینجا ما متد را در کلاس Person اورراید کردیم ولی در صورت استفاده از کلاس object باز هم از متد Override شده در فراخوانی استفاده میشود. چرا؟
Program.cs
namespace ObjectOverride
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Person("Homer", "Simpson", 50);
Person p2 = new Person("Homer", "Simpson",50);
// p1.Equals(p2);
Console.WriteLine(object.Equals(p1, p2));
Console.WriteLine(object.ReferenceEquals(p1,p2));
}
}
}
person.cs
namespace ObjectOverride
{
class Person
{
public string fName;
public string lName;
public byte personAge;
public Person(string firstName, string lastName, byte age)
{
fName = firstName;
lName = lastName;
personAge = age;
}
public Person()
{ }
public override string ToString()
{
string myState;
myState = string.Format("[First Name: {0}; Last Name: {1}; Age: {2}]",
fName, lName, personAge);
return myState;
}
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;
}
public override int GetHashCode()
{
return this.ToString().GetHashCode();
}
}
}
خوب حالا اینجا ما متد را در کلاس Person اورراید کردیم ولی در صورت استفاده از کلاس object باز هم از متد Override شده در فراخوانی استفاده میشود. چرا؟
Program.cs
namespace ObjectOverride
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Person("Homer", "Simpson", 50);
Person p2 = new Person("Homer", "Simpson",50);
// p1.Equals(p2);
Console.WriteLine(object.Equals(p1, p2));
Console.WriteLine(object.ReferenceEquals(p1,p2));
}
}
}
person.cs
namespace ObjectOverride
{
class Person
{
public string fName;
public string lName;
public byte personAge;
public Person(string firstName, string lastName, byte age)
{
fName = firstName;
lName = lastName;
personAge = age;
}
public Person()
{ }
public override string ToString()
{
string myState;
myState = string.Format("[First Name: {0}; Last Name: {1}; Age: {2}]",
fName, lName, personAge);
return myState;
}
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;
}
public override int GetHashCode()
{
return this.ToString().GetHashCode();
}
}
}