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

Насколько я понимаю C# передает параметры в методы ссылкой. В VB.NET можно указать это с ByVal и ByRef. Значением по умолчанию является ByVal.

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

22
задан Peter Mortensen 1 April 2017 в 17:06
поделиться

3 ответа

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

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

  • передачей типа значения по значению (изменения типа значения не видны вызывающему, но в идеале типы значений должны быть неизменными в любом случае)
  • передача тип-значение по ссылке (изменения типа-значения видны вызывающему, но в идеале типы-значения должны быть неизменными в любом случае - так важно, я скажу это дважды; p)
  • передача ссылки по значению (изменения to поля / свойства типа ссылки видны вызывающей стороне, но переназначение типа ссылки новому / другому объекту невидимо )
  • передача ссылки по ссылке (изменения полей / свойств, и переназначение ссылки видны вызывающему)
53
ответ дан 29 November 2019 в 03:33
поделиться

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

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

13
ответ дан 29 November 2019 в 03:33
поделиться

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

7
ответ дан 29 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: