Нет, потому что в этом сценарии AttackerStrength
объявлен как локальная переменная;присвоение AttackerStrength
только изменяет локальную переменную.Тем не мение!Это на самом деле нюансированная тема:
Если локальной переменной является объект , то распространяются изменения в состоянии объекта , так как только один объект ;то есть
SomeObject foo = PlayerOnCell.Foo;
// ...
foo.Strength = 42; // will be seen everywhere; only one object
Но если локальной переменной является struct , то этого не происходит , как присвоение foo
копий значение:
SomeStruct foo = PlayerOnCell.Foo;
// ...
foo.Strength = 42; // not propagated - foo is a copy
(кстати, эта путаница - хорошая причина избегать изменяемых структур - они злые! структуры редки, и в этом редком случае, когда вы их создаете, вы должны по умолчанию использовать readonly struct
).
Аналогично, если вы используете «ref return» и «ref locals», то вы можете в конечном итоге изменить удаленное состояние - но вы не можете сделать это случайно, так как для этого требуются определенные ref
синтаксис и актуальный компилятор:
ref int DefenderStrength = ref PlayerOnCell.ST;
// ...
DefenderStrength = 42; // this will have changed the state inside PlayerOnCell
Это также относится к сценарию SomeStruct
, если используются "ref return" и "ref locals":
ref SomeStruct foo = ref PlayerOnCell.Foo;
// ...
foo.Strength = 42; // updates the value from PlayerOnCell
(на данный момент мы смешиваем несколько очень продвинутых концепций, поэтому очень редко вам нужно знать об этом последнем сценарии в реальном коде; и если вы находятся в этом мире, почти всякую путаницу здесь можно избежать, сказав, что все struct
должны быть либо readonly struct
(default) или ref struct
(если оно обязательно должно быть изменяемым) - это указание останавливает срабатывание почти всех ловушек)