Pada intinya keduanya ref
dan out
menyediakan mekanisme untuk meneruskan alamat variabel ke suatu metode sehingga dapat diperbarui - menugaskan ref
atau out
parameter memperbarui variabel dalam konteks pemanggil. Perbedaannya ada pada jaminan: out
jaminan bahwa variabel akan diperbarui, ref
tidak.
Dari sisi lain panggilan ada perbedaan yang sama. Sebuah out
parameter untuk metode kami tidak dijamin mengandung sesuatu yang berguna pada saat kedatangan dan harus diatur ke nilai di beberapa titik, sementara ref
parameter dapat diasumsikan memiliki nilai dan kita tidak perlu melakukan sesuatu yang spesifik dengan itu.
Perbedaan ini berdampak pada analisis kode, pembangkitan, dan pengoptimalan yang, meskipun tidak terlalu jelas bagi kita sebagian besar waktu, dapat memiliki beberapa efek pada cara program kita pada akhirnya beroperasi. Pembuat kode dapat menunda alokasi variabel sampai segera sebelum panggilan, pengoptimal mungkin memutuskan dapat menyusun ulang beberapa operasi lebih efektif berdasarkan kontrak, dll.
Dalam hal penggunaan: sebagai aturan umum saya gunakan out
untuk situasi di mana saya tidak peduli tentang konten variabel ketika tiba sebagai parameter dan ref
ketika saya melakukannya.