是否接受了此运算符重载,为什么?

时间:2014-05-30 23:58:06

标签: c# visual-studio-2010

如果有一个班级Cow,并且它有两个实例 - cowAcowB - 这是否被接受?

if (cowA > cowB)
{
}

如果是这样,为什么?

2 个答案:

答案 0 :(得分:2)

如果被接受,你的意思是良好的做法,那么简短的回答是:没有错。更具体地说,如果在使用对象的上下文中,比较(大于和小于)具有直观意义,那么运算符重载并不是一件坏事。

另一方面,如果比较可能具有含糊不清的含义,那么最好使用具有描述性特征含义的特定含义的函数。在一天结束时,我们希望代码能够让读者明白其意图。

答案 1 :(得分:1)

如果Cow重载>运算符,则完全可以接受。它当然不会默认,但你可以定义它!

操作符只是特殊的函数,所以如果你编写一个带有Cow个对象的函数,编译器/运行时就不会抱怨。

如果Cow对数字类型进行了隐式转换,那么该行也是有效的,尽管这不太可能;)

要重载>运算符,您可以执行以下操作:

public static bool operator < (Cow x, Cow y) 
{
      return x.Age < y.Age;
}

显然我编造了比较逻辑:)

请注意,如果您这样做,则还需要重载>。见MSDN