为什么c++在c#中的用法不同

本文关键字:用法 c++ 为什么 | 更新日期: 2023-09-27 18:20:52

我有一个类Deduction,它具有int类型的属性Sequence

public class Deduction
{
   private int _sequence;
   public int Sequence
   {
      get { return _sequence; }
      set { _sequence = value; }
   } 
   ...
}

现在我有一个Deduction类型的对象,它的Sequence属性的值为1:

Deduction deduction = new Deduction();
deduction.Sequence = 1;

现在我有一个int类型的变量newSequence,其值为-1:

int newSequence = -1;

我想取deduction对象的Sequence属性的当前值,加1并将结果存储在newSequence变量中。所以我写了这个代码:

newSequence = deduction.Sequence++;

但我发现,上面的代码将deduction对象的Sequence属性的值从1更改为2,而我预计它将保持在1

此外,上面的代码将newSequence的值从-1更改为1,而我预计它将更改为2

这很奇怪。有人能解释一下这里发生了什么吗?

感谢

为什么c++在c#中的用法不同

++递增其旁边的值。如果在变量/属性后有运算符(++,则变量在赋值后递增1。如果在赋值之前有++,则变量会在赋值之前增加。

看来您要找的是newSequence = deduction.Sequence + 1;

这:

newSequence = deduction.Sequence++;

相当于:

newSequence = deduction.Sequence;
deduction.Sequence = deduction.Sequence + 1;

现在更有意义了吗?

如果你这样做:

newSequence = ++deduction.Sequence;

它变成这样:

deduction.Sequence = deduction.Sequence + 1;
newSequence = deduction.Sequence;

正如其他人所说,你可能不想更改deduction.Sequence,所以你想使用这个:

newSequence = deduction.Sequence + 1;

来自MSDN:

递增运算符(++)将其操作数递增1。增量运算符可以出现在其操作数之前或之后:++变量和变量++。备注第一种形式是前缀增量操作。运算的结果是操作数的值已递增。第二种形式是后缀增量操作。运算的结果是操作数在已递增。数值类型和枚举类型已预定义增量运算符。用户定义的类型可以重载++运算符。枚举通常允许对积分类型进行操作。

你可能错过了这是如何运作的微妙之处。通过将操作数放在末尾,完成赋值,然后完成增量。

++是变量后面的post增量运算符,这意味着增量发生在赋值之后。

newSequence = deduction.Sequence++;

您将deduction.Sequence的旧值分配给newSequence然后递增deduction.Sequence的值。