R
Raj
Please observe the code snippet:
namespace OverrideEquals
{
class Human
{
public string name {get;set;}
public override bool Equals(object obj)
{
Human h = obj as Human;
if (h is Human)
{
if (this.name == h.name)
return true;
else
return false;
}
else
{
Console.Write("Not a human:");
return false;
}
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
class Animal
{
public string name { get; set; }
}
public class Program
{
public static void Main()
{
string name1 = "Allan";
string name2 = "Allan";
StringBuilder sb1 = new StringBuilder("Allex");
StringBuilder sb2 = new StringBuilder("Allex");
Human h1 = new Human() { name = "Stuart" };
Human h2 = new Human() { name = "Stuart" };
Animal a1 = new Animal() { name = "Cat" };
Animal a2 = new Animal() { name = "Cat" };
Console.WriteLine("name==name: {0}",name1==name2);
Console.WriteLine("name1.Equals(name2): {0}",name1.Equals(name2));
Console.WriteLine("\n");
Console.WriteLine("sb1==sb2: {0}",sb1==sb2);
Console.WriteLine("sb1.Equals(sb2): {0}",sb1.Equals(sb2));
Console.WriteLine("\n");
Console.WriteLine("a1==a2: {0}",a1 == a2);
Console.WriteLine("a1.Equals(a2): {0}",a1.Equals(a2));
Console.WriteLine("\n");
Console.WriteLine("h1==h2: {0}",h1 == h2);
Console.WriteLine("h1.Equals(h2): {0}",h1.Equals(h2));
Console.WriteLine("h1.Equals(a1): {0}",h1.Equals(a1));
Console.WriteLine("Equals(h1,h2): {0}",Equals(h1,h2));
Console.WriteLine("Equals(a1,a2): {0}",Equals(a1,a2));
}
}
}
Output:
name1==name2: True
name1.Equals(name2): True
sb1==sb2: False
sb1.Equals(sb2): True
a1==a2: False
a1.Equals(a2): False
h1==h2: False
h1.Equals(h2): True
Not a human:h1.Equals(a1): False
Equals(h1,h2): True
Equals(a1,a2): False
How overriding virtual function Equals in Human affects static function
Equals: Equals(h1,h2)?
Thank you
Regards
Raj
namespace OverrideEquals
{
class Human
{
public string name {get;set;}
public override bool Equals(object obj)
{
Human h = obj as Human;
if (h is Human)
{
if (this.name == h.name)
return true;
else
return false;
}
else
{
Console.Write("Not a human:");
return false;
}
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
class Animal
{
public string name { get; set; }
}
public class Program
{
public static void Main()
{
string name1 = "Allan";
string name2 = "Allan";
StringBuilder sb1 = new StringBuilder("Allex");
StringBuilder sb2 = new StringBuilder("Allex");
Human h1 = new Human() { name = "Stuart" };
Human h2 = new Human() { name = "Stuart" };
Animal a1 = new Animal() { name = "Cat" };
Animal a2 = new Animal() { name = "Cat" };
Console.WriteLine("name==name: {0}",name1==name2);
Console.WriteLine("name1.Equals(name2): {0}",name1.Equals(name2));
Console.WriteLine("\n");
Console.WriteLine("sb1==sb2: {0}",sb1==sb2);
Console.WriteLine("sb1.Equals(sb2): {0}",sb1.Equals(sb2));
Console.WriteLine("\n");
Console.WriteLine("a1==a2: {0}",a1 == a2);
Console.WriteLine("a1.Equals(a2): {0}",a1.Equals(a2));
Console.WriteLine("\n");
Console.WriteLine("h1==h2: {0}",h1 == h2);
Console.WriteLine("h1.Equals(h2): {0}",h1.Equals(h2));
Console.WriteLine("h1.Equals(a1): {0}",h1.Equals(a1));
Console.WriteLine("Equals(h1,h2): {0}",Equals(h1,h2));
Console.WriteLine("Equals(a1,a2): {0}",Equals(a1,a2));
}
}
}
Output:
name1==name2: True
name1.Equals(name2): True
sb1==sb2: False
sb1.Equals(sb2): True
a1==a2: False
a1.Equals(a2): False
h1==h2: False
h1.Equals(h2): True
Not a human:h1.Equals(a1): False
Equals(h1,h2): True
Equals(a1,a2): False
How overriding virtual function Equals in Human affects static function
Equals: Equals(h1,h2)?
Thank you
Regards
Raj