2015-11-06 4 views
-5

У меня есть класс Deduction, который имеет свойство Sequence из int типа:Почему использование ++ отличается от C#?

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; 

Теперь я имеют переменную newSequence категории int, значение которой составляет -1:

int newSequence = -1; 

Я хочу взять текущее значение Sequence объект deduction объект, добавить 1 и сохранить результат в newSequence переменной. Так что я написал этот код:

newSequence = deduction.Sequence++; 

Но что я узнаю, что приведенный выше код изменяет значение Sequence имущества deduction объекта к от в то время как я ожидал, что он будет оставаться на .

А также приведенный выше код изменяет значение newSequence к от -1 в то время как я ожидал, что это изменится 2.

Это странно. Может ли кто-нибудь объяснить, что здесь происходит?

Благодаря

+9

Вы прочитали [документацию] (https://msdn.microsoft.com/en-us/library/36x43w8w.aspx)? – mason

+0

@ AlexM. Вы должны объяснить, что в этом плохого. – mason

+0

Вы можете прочитать 'variable ++' as: 'сначала дать мне значение переменной, затем прирастить переменную', в то время как '++ variable' можно прочитать как: 'increment variable, а затем дать мне свое (уже увеличенное) значение'. –

ответ

3

Это:

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; 
+0

Спасибо за четкие примеры. – ChumboChappati

4

++ увеличивает значение он находится рядом. Если у вас есть оператор (++) после переменная/свойство, приращение переменной на 1 после назначение. Если у вас есть ++до присвоение, переменная увеличивается до назначения.

кажется, что то, что вы ищете newSequence = deduction.Sequence + 1;

2

От MSDN:

Оператор инкремента (++) увеличивает значение операнда на 1. Оператор инкремента может появиться до или после того, как его операнд: ++ и переменная ++. Заметки Первая форма - операция приращения префикса. Результатом операции является значение операнда после того, как оно было увеличено на . Вторая форма - операция приращения постфикса. Результатом операции является значение операнда до того, как оно будет увеличено на . Числовые и перечисляемые типы предопределены операторы приращения . Пользовательские типы могут перегружать оператор ++. Операции с интегральными типами обычно допускаются при перечислении.

Возможно, вам не хватает тонкости, как это работает. Поместив операнд в конец, задание выполняется затем приращением.

1

++ является post оператор приращения, когда он приходит после переменной, что означает, что приращение происходит после назначения.

newSequence = deduction.Sequence++; 

Вы назначая старое значение deduction.Sequence к newSequence, затем приращению значения deduction.Sequence.

Смежные вопросы