Her ikisinin de özünde refve outbir değişkenin adresini bir yönteme geçirmek için bir mekanizma sağlar, böylece güncellenebilir - refveya outparametresine atanmak değişkeni arayanın bağlamında günceller. Farklı oldukları yerde garantiler vardır: outdeğişkenin güncelleneceğini garanti eder, refetmez.
Çağrının diğer tarafından benzer farklılıklar var. Metodumuzun bir outparametresinin varışta yararlı bir şey içereceği garanti edilmez ve bir noktada bir değere ayarlanması gerekirken, bir refparametrenin bir değere sahip olduğu varsayılabilir ve onunla özel bir şey yapmamız gerekmez.
Bu farkın kod analizi, üretimi ve optimizasyonu üzerinde etkisi vardır, bu da çoğu zaman bizim için çok belirgin olmasa da, programlarımızın çalışma şekli üzerinde bazı etkileri olabilir. Kod üreticisi, çağrıdan hemen önce değişkenin tahsisini erteleyebilir, optimize edici, sözleşmeye dayalı olarak bazı işlemleri daha etkili bir şekilde yeniden sıralayabileceğine karar verebilir.
Kullanım açısından: genel bir kural outolarak, değişkenin parametresi olarak geldiğinde ve refyaptığımda içeriği umursamadığım durumlar için kullanıyorum .