5

它出现在 C# 中你不能覆盖后减量运算符?

我正在“反射”并遇到了反射器翻译成的一些代码,decimal.op_Decrement(x)我试图弄清楚它是否--x意味着x--.

public struct IntWrapper
{
    public static IntWrapper operator --(IntWrapper value)
    {
        return new IntWrapper(value.value - 1);
    }

    public static IntWrapper operator (IntWrapper value)--
    {
        ???
    }

    private int value;

    public IntWrapper(int value)
    {
        this.value = value;
    }
}

框架是否只使用“前减量”版本进行“后减量”操作?

4

3 回答 3

13

后缀++/--运算符与其对应的前缀相同,除了第一个在分配之前创建变量的副本(如果需要)。

所以,这段代码:

int x = Function(y--);

等于此代码:

int x = Function(y);
--y;

这就是为什么不需要重载后缀运算符的原因。

于 2009-11-05T04:21:42.473 回答
1

基本上,没有必要区分,因为:

decimal x = y--;

相当于

decimal x = y;
decimal.op_Decrement(y);

decimal x = --y;

相当于

decimal x;
decimal.op_Decrement(y);
x = y;
于 2009-11-05T04:27:46.813 回答
0

没关系。在被操作的变量的上下文中,前缀和后缀运算符之间没有区别。只有在调用代码的上下文中,差异才重要。

于 2009-11-05T04:19:22.667 回答