Подтвердить что ты не робот

Как "сделать" ByVal в С#

Как я понимаю, С# передает параметры в методы по ссылке. В VB.NET вы можете указать это с помощью ByVal и ByRef. По умолчанию используется значение ByVal.

Это для совместимости с Visual Basic 6.0 или просто случайно? Кроме того, как я могу указать, что использовать в С#? Я вроде как идея передачи параметров по значению.

4b9b3361

Ответ 1

Параметры в С# по умолчанию передаются по значению. Модификатора нет, чтобы сделать это явным, но если вы добавите ref/out, этот параметр будет доступен по ссылке.

Обычная путаница здесь заключается в различии между:

  • передача значения типа по значению (изменения типа значения не отображаются вызывающему, но значения-типы в идеале должны быть неизменными в любом случае)
  • передача значения типа по ссылке (изменения в тип значения видны вызывающему, но значения-типы в идеале должны быть неизменными в любом случае - так важно, что я скажу дважды: p)
  • передача ссылки по значению (изменения для полей/свойств ссылочного типа видны вызывающему, но переназначение ref-type для нового/другого объект не отображается)
  • передача ссылки по ссылке (изменения в полях/свойствах и переназначение ссылки видны вызывающему абоненту)

Ответ 2

Передача по значению по умолчанию используется в С#. Однако, если передаваемая переменная имеет ссылочный тип, вы передаете ссылку по значению. Возможно, это является причиной вашей путаницы.

В принципе, если вы передаете ссылку по значению, вы можете изменить объект, на который он ссылается, и эти изменения будут сохраняться вне метода, но вы не можете сделать переменную ссылкой на другой объект, и это изменение сохраняется за пределами метод.

Ответ 3

Параметры в С# по умолчанию передаются "ByVal". Вы должны указать "ref" или "out", если хотите другое поведение.