5

C# ではポストデクリメント演算子をオーバーライドできないようです?

私は「リフレクター」をしていて、リフレクターが変換したコードに出くわし、decimal.op_Decrement(x)それが意味するもの--xx--.

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 に答える