По своей сути , как ref
и out
обеспечить механизм для передачи адреса переменных к способу , так что он может быть обновлен - назначение на ref
или out
параметр обновляет переменную в контексте вызывающего абонента. В чем они отличаются, так это в гарантиях: out
гарантий, что переменная будет обновлена, ref
нет.
С другой стороны вызова есть аналогичные различия. out
Параметр нашего метода не гарантируется содержит ничего полезного по прибытии и должен быть установлен на значение в какой - то момент, в то время как ref
параметр можно предположить , что он имеет значение , и мы не должны делать ничего конкретного с ним.
Это различие влияет на анализ, генерацию и оптимизацию кода, которые, в большинстве случаев, не слишком очевидны для нас, но могут повлиять на работу наших программ. Генератор кода может отложить выделение переменной до момента, предшествующего вызову, оптимизатор может решить, что он может более эффективно переупорядочить некоторые операции на основе контракта и т. Д.
С точки зрения использования: как общее правило, я использую out
для ситуаций, когда меня не волнует содержание переменной, когда она поступает в качестве параметра и ref
когда я делаю.