我尝试覆盖 -- 运算符。 我想要前缀和后缀 -- 运算符 但c#不允许,即使有不同的签名功能。 代码:
public static Rational operator --(Rational a)
{
a.Mona -= a.Mechane;
return a.reduce();
}
public static Rational operator --(Rational a, int _)
{
_ = 0;
Rational original = new Rational(a.Mona, a.Mechane);
a.Mona -= a.Mechane;
a.reduce();
return original;
}
错误:
Overloadable binary operator expected
我尝试做两个运算符
在 C# 中,一元递增/递减运算符应返回新值,而不是改变其操作数。你想做的事情是不可能的。 12.9.6 C# 规范中的前缀递增和递减运算符:
可以使用后缀或前缀表示法来调用运算符
或运算符++
实现。这两种表示法不可能有单独的运算符实现。--
相反,您可以实现一个命名方法来就地操作:
public Rational Decrement()
{
this.Mona -= this.Mechane;
return this.reduce();
}
并重复使用它:
public static Rational operator --(Rational a)
{
var r = new Rational(a.Mona, a.Mechane);
r.Decrement();
return r;
}
这里有问题:
operator --
,很容易意外地使用低效的前缀递减而不是 .Decrement()
Decrement
的返回类型可能会导致用户相信它返回一个新值,而不是用于链接但是如果您对这些权衡不满意,则必须以其他方式解决它们。