C # refve outbaş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:
refdeğişkenin işleve geçirilmeden önce başlatılmasını gerektirir,outdeğil.outdeğişkenin fonksiyonun içinde başlatılmasını gerektirir,refyapmaz.
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 ( TryParseve TryGetValuekalı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.
refC ++ 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ı])