В основі їх обох ref
і out
забезпечують механізм передачі адреси змінної методу, щоб вона могла бути оновлена - присвоєння параметру ref
або out
оновлення змінної в контексті виклику. Там, де вони відрізняються, є гарантії: out
гарантії на те, що змінна буде оновлена, ref
ні.
З іншого боку дзвінка є подібні відмінності. out
Параметр нашого методу не гарантується містить нічого корисного після прибуття і повинен бути встановлений на значення в який - то момент, в той час як ref
параметр можна припустити , що він має значення , і ми не повинні робити нічого конкретного з ним.
Ця різниця впливає на аналіз коду, генерування та оптимізацію коду, який, хоча і не дуже очевидний для нас більшість часу, може мати певний вплив на спосіб роботи наших програм. Генератор коду може відкласти розподіл змінної безпосередньо перед викликом, оптимізатор може вирішити, що вона може змінити послідовність деяких операцій на основі контракту тощо.
З точки зору використання: як правило, я використовую out
ситуацію, коли мені не байдуже вміст змінної, коли вона надходить як параметр і ref
коли я це роблю.