Разница между параметрами in и ref только для чтения
В чем разница между параметрами и (С# 12)?
Я нашел обаin
иref readonly
параметры делают параметр доступным только для чтения и не могут быть изменены в вызываемом методе. Есть ли у них аналогичная функция?
1 ответ
Представьте, что вам требуется ссылка на значение вместо значения в качестве аргумента метода, но вы хотите передать файл . На данный момент у вас есть три варианта передачи по ссылке:
Параметр: это не ваш вариант, поскольку вы передаете параметр, который не может быть изменен, но поскольку технически вы можете изменить параметр, компилятор должен создать копию, чтобы гарантировать, что параметр не будет изменен.
Параметр: Этот параметр неприменим в вашем случае, поскольку позволяет избежать копирования всего
struct
и запрещает модификацию, нет никакой гарантии, что ваш параметр действительно будет передан по ссылке - вы можете опустить ключевое слово при передаче параметра, чтобы передать его по значению. Это означает, что если вам нужна ссылка, например, на небезопасный метод, это не сработает. Ключевое слово in используется не для передачи параметра по ссылке только для чтения, а для того, чтобы избежать выделения. Часто это означает передачу параметра по ссылке, но это не обязательно.The
readonly ref
Параметр решает поставленную выше проблему: это гарантируется предупреждением компилятора о том, что значение должно быть передано по ссылке и не будет защитной копии, поскольку вы не можете изменить параметр.
В заключение: только чтениеref parameter
будет работать, если вам нужна ссылка наreadonly struct
. in
параметр не гарантирует, что параметр передается по ссылке, а параметрref
Параметр допускает модификацию, а это означает, что компилятор должен скопировать объект, чтобы гарантировать, что он не будет изменен.