【发布时间】:2014-02-06 13:10:05
【问题描述】:
我对泛型有疑问。当我尝试在通用中使用较少的运算符时,他们的调用没有发生。但它适用于 Equals 方法。 那是一个测试类:
public class Test
{
public int i;
static public Boolean operator ==(Test obj1, Test obj2)
{
Console.WriteLine("operator ==");
return obj1.i == obj2.i;
}
static public Boolean operator !=(Test obj1, Test obj2)
{
Console.WriteLine("operator !=");
return obj1.i != obj2.i;
}
public override bool Equals(object obj)
{
Console.WriteLine("operator equals");
return this == (Test)obj;
}
public override int GetHashCode()
{
Console.WriteLine("HashCode");
return 5;
}
}
还有类检查器:
public class Checker
{
public Boolean TestGeneric<T>(T Left, T Right) where T : class
{
return Left == Right; //not work override operators
return Left.Equals(Right); //work fine
}
}
小测试:
Test left = new Test() { i = 4 };
Test right = new Test() { i = 4 };
var checker = new Checker();
Console.WriteLine(checker.TestGeneric<Test>(left, right));
Console.ReadKey();
如何在泛型类 Test 中使用更少的运算符?
【问题讨论】:
-
除非您知道自己在做什么,否则请不要覆盖 equals。即使这样,也要三思而后行!
-
return 5;不是最大的哈希码。 -
是的。您应该改用 666。
-
@Jodrell 为什么?在任何可能的 1 项中都没有冲突。