Overriding virtual function Equals affecting static Equals...

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
 
H

Harlan Messinger

Raj said:
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)?

More to the point, why does your code compile when you call a static
method called Equals in your Program class that you haven't defined?
 
F

Family Tree Mike

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

Because I believe that all Object.Equals(h1, h2) does is to call
h1.Equals(h2), which you have overridden. Stick a breakpoint in your
override and you will see this happening.
 
R

Raj

Hoz that happens?

Family Tree Mike said:
Because I believe that all Object.Equals(h1, h2) does is to call
h1.Equals(h2), which you have overridden. Stick a breakpoint in your
override and you will see this happening.
 
P

Peter Duniho

Raj said:
Hoz that happens?

class Object
{
public virtual bool Equals(Object obj)
{
return this == obj;
}

public static bool Equals(Object obj1, Object obj2)
{
return obj1.Equals(obj2);
}
}
 
R

Raj

Is it possible that I can get your email id please? Mine is (e-mail address removed)

Thank you

Regards
Raj
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top