【发布时间】:2017-01-23 12:44:09
【问题描述】:
我有以下代码:
public class Foo
{
public static bool operator<(Foo l, Foo f)
{
Console.WriteLine("Foo!");
return false;
}
//public static bool operator>(Foo l, Foo f)
//{
// return f < l;
//}
}
编译器通过消息告知错误:
运算符 'Program.Foo.operator '
这对我来说似乎很奇怪。为什么我要超载 operator> ?
【问题讨论】:
-
为什么这么奇怪?如果定义 obj1 何时小于 obj2,则还应定义 obj1 何时大于 obj2
-
我会说 not 重载两者都是“奇怪的”。发现
a < b与b > a不同,我肯定会感到惊讶。 -
@LmTinyToon 不,这是一个预先修复的错误。
-
如果你有一个小于运算符,你也有一个大于运算符。如果您的
<运算符并不意味着“小于”,那么您可能不应该拥有它。改用一种方法。运算符应该有明确的含义。 -
"但我永远无法使用运算符 >" - 也许你不会现在但那将永远是案子?其他编写代码的人呢?他们可能会使用它?你打算怎么做,四处走走,从每个人的键盘上撕下 > 键,以防止他们在你的代码中使用它?