C # ref
ve out
başvuru ile iletilecek argümanlar yapmak için anahtar kelimeyi sağlar. İkisinin semantiği çok benzer. Tek fark, flaged değişkenin başlatılmasıdır:
ref
değişkenin işleve geçirilmeden önce başlatılmasını gerektirir,out
değil.out
değişkenin fonksiyonun içinde başlatılmasını gerektirir,ref
yapmaz.
Bu iki anahtar kelimenin kullanım durumları da hemen hemen aynıdır ve çok sık kullanımları, bir kod kokusu olarak kabul edilir ( TryParse
ve TryGetValue
kalıpları gibi geçerli kullanım durumları olmasına rağmen ).
Bu nedenle birisi açıklayabilir, neden bu kadar dar kullanım durumları için C # 'da iki benzer araç var?
Ayrıca, MSDN'de farklı çalışma zamanı davranışlarına sahip oldukları belirtilir:
Ref ve out anahtar sözcükleri farklı çalışma zamanı davranışlarına neden olsa da, derleme zamanında yöntem imzasının bir parçası olarak değerlendirilmezler.
Çalışma zamanı davranışları nasıl farklıdır?
Sonuç
Her iki cevap da doğru görünüyor, ikinize de teşekkürler. Jmoreno'ları kabul ettim çünkü daha açık.
ref
C ++ ile aynı şekilde uygulanır ; söz konusu nesne işaretçisine (veya ilkel) işaret etmek için. yaniInt32.TryParse(myStr, out myInt)
(C #), (C) 'nin yaptığı gibi "yürütülür"int32_tryParse(myStr, &myInt)
; tek fark, hataların önlenmesi için derleyici tarafından uygulanan bazı kısıtlamalardır. (Bunu cevap olarak vermeyeceğim, çünkü bunun perde arkasında nasıl çalıştığı konusunda yanılıyor olabilirim, ancak bu şekilde çalışmasını öngörüyorum [çünkü mantıklı])