Разница между параметрами in и ref только для чтения

В чем разница между параметрами и (С# 12)?

Я нашел обаinиref readonlyпараметры делают параметр доступным только для чтения и не могут быть изменены в вызываемом методе. Есть ли у них аналогичная функция?

1 ответ

Представьте, что вам требуется ссылка на значение вместо значения в качестве аргумента метода, но вы хотите передать файл . На данный момент у вас есть три варианта передачи по ссылке:

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

  2. Параметр: Этот параметр неприменим в вашем случае, поскольку позволяет избежать копирования всегоstructи запрещает модификацию, нет никакой гарантии, что ваш параметр действительно будет передан по ссылке - вы можете опустить ключевое слово при передаче параметра, чтобы передать его по значению. Это означает, что если вам нужна ссылка, например, на небезопасный метод, это не сработает. Ключевое слово in используется не для передачи параметра по ссылке только для чтения, а для того, чтобы избежать выделения. Часто это означает передачу параметра по ссылке, но это не обязательно.

  3. The readonly refПараметр решает поставленную выше проблему: это гарантируется предупреждением компилятора о том, что значение должно быть передано по ссылке и не будет защитной копии, поскольку вы не можете изменить параметр.

В заключение: только чтениеref parameterбудет работать, если вам нужна ссылка наreadonly struct. inпараметр не гарантирует, что параметр передается по ссылке, а параметрrefПараметр допускает модификацию, а это означает, что компилятор должен скопировать объект, чтобы гарантировать, что он не будет изменен.

Другие вопросы по тегам