我有基类Class1和派生类class2。我创建了两个class2实例,但定义为class1。 我的问题是我不能在这些对象之间做一般的比较。 这是一个例子:
public class Class1
{
public int Property1 = 0;
}
public class Class2 : Class1
{
public int Property2 = 0;
public static bool operator ==(Class2 c1, Class2 c2)
{
return c1.Property2 == c2.Property2;
}
public static bool operator !=(Class2 c1, Class2 c2)
{
return c1.Property2 != c2.Property2;
}
}
public class Class3 : Class1
{
public int Property3 = 0;
}
static void Main(string[] args)
{
Class1 obj1 = new Class2();
Class1 obj2 = new Class2();
if (obj1 == obj2)
{
Console.WriteLine("Yes !!! The two objects are equal!");
}
else
{
Console.WriteLine("The two objects are not equal.");
}
}
如果我换行:
if (obj1 == obj2)
有:
if ((Class2)obj1 == (Class2)obj2)
一切都是正确的,但如果obj1和obj2是Class3,我会收到错误
我该如何解决?
谢谢
Crandel
答案 0 :(得分:0)
将运算符重载添加到所有类中,在您的示例中将其添加到Class1
以使其工作
答案 1 :(得分:0)
在我看来,重载==和!=运算符是个坏主意,因为引用类型的默认语义是比较引用而不是值。我宁愿覆盖bool Equals(System.Object)和int GetHashCode()并使用Equals进行值比较 - 恕我直言通过减少歧义使代码更具可读性。