C# 重载运算符<;在C中#

C# 重载运算符<;在C中#,c#,operator-overloading,C#,Operator Overloading,我有以下代码: 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; //} } 公共类Foo

我有以下代码:

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;
    //}
}
公共类Foo
{
公共静态布尔运算符(Foo l,Foo f)
//{
//返回f
编译器通过以下消息说明错误:

还将定义运算符“Program.Foo.operator”

我觉得很奇怪。为什么我要超载
操作员>

来自:

如果重载,比较运算符必须成对重载;也就是说,如果==重载,!=也必须超载

反之亦然,和for=相似

发件人:

如果重载,比较运算符必须成对重载;也就是说,如果==重载,!=也必须超载

反之亦然,和for=相似


因为该操作符成对出现(比如
=
!=
)。它希望您同时实现这两个功能,以确保您不会意外地忘记它。如果您说
也应该如此,因此您也必须使其过载

正如上面所说:


用户定义的类型可以重载
,因为该运算符成对出现(如
=
!=
)。它希望您同时实现这两个功能,以确保您不会意外地忘记它。如果您说
也应该如此,因此您也必须使其过载

正如上面所说:


用户定义的类型可以重载
这是比较运算符重载的规则。只能成对重载这些运算符:

  • ==
    =
  • =
如果重载,比较运算符必须成对重载; 也就是说,如果==重载,!=也必须超载。相反 也是正确的,并且对于<和>,对于=,类似


这是比较运算符重载的规则。只能成对重载这些运算符:

  • ==
    =
  • =
如果重载,比较运算符必须成对重载; 也就是说,如果==重载,!=也必须超载。相反 也是正确的,并且对于<和>,对于=,类似


我可以推测原因在于不等式算子的数学性质


>与相反,我可以推测原因是因为不等式算子的数学性质


>为什么这很奇怪?如果定义obj1小于obj2的时间,那么还应该定义obj1大于obj2I的时间,我认为不重载这两个值是“奇怪的”。如果我发现
a
b>a
@LmTinyToon不一样,那肯定会让我感到惊讶。不,这是一个事先修复的错误。如果你有一个小于运算符,你也有一个大于运算符。如果你的
“但我永远不会使用Operator>”-也许你现在不会,但会一直这样吗?其他从事代码工作的人呢?他们可能会用它?你打算怎么做,到处乱跑,从每个人的键盘上撕下>键,防止他们在你的代码中使用它?为什么这么奇怪?如果定义obj1小于obj2的时间,那么还应该定义obj1大于obj2I的时间,我认为不重载这两个值是“奇怪的”。如果我发现
a
b>a
@LmTinyToon不一样,那肯定会让我感到惊讶。不,这是一个事先修复的错误。如果你有一个小于运算符,你也有一个大于运算符。如果你的
“但我永远不会使用Operator>”-也许你现在不会,但会一直这样吗?其他从事代码工作的人呢?他们可能会用它?你打算怎么做,四处走动,从每个人的键盘上撕下>键,防止他们在你的代码中使用它?>=与<如果我没弄错的话。你的观点是正确的。似乎(见维基):然而,(a>b)的对立面是(a>=是<的对立面,如果我没有弄错的话。你的观点是正确的。似乎(见维基):然而,(a>b)的对立面是(a看起来MSDN页面现在已经更新,不再这么说了,但对我来说,这句话本身听起来更像是在谈论其他二进制运算符——例如,重载二进制“+”运算符也会隐式重载“+=”运算符(然而,当比较运算符成对出现时,它不是隐式的,而是必须显式的)。似乎此注释不适用于比较运算符(因为它们没有等效的赋值运算符),这可能是它不再包含在页面上的原因。@NotEnoughData使用最新的文档更新,这仍然支持我的答案。看起来MSDN页面现在已经更新,不再这样说了,但对我来说,引用本身听起来更像是在谈论其他二进制运算符-例如,bi重载“nar'+”操作符也会隐式地重载“+=”运算符(而当比较运算符成对出现时,它不是隐式的,而是必须显式的)。似乎此注释不适用于比较运算符(因为它们没有等效的赋值运算符),这可能是它不再包含在页面上的原因。@NotEnoughData使用最新文档更新,它仍然支持我的答案。