2014-10-09 20 views
6

VB6 yöntemlerini parantez ile çağırmayla ilgili bir soruyu yanıtladığımda,parametre değerlerinin ByVal iletilmesine zorlayabileceğinizi hatırlıyorum. Araştırma, ben hala VB.NET'te çalışıyor bulundu. Bununla birlikte, C# 'de buna benzer bir şey bulamıyorum. Ancak, buna benzer bir şey bulamıyorum. Geçtiğimiz yıl, iyi bir sebep olmaksızın ByRef numaralı telefondan çok sayıda VB.NET sınıf kütüphanesine başvurmak zorunda kaldım (güven bana, kontrol ettim). Bu, onları iletmek için yerel değişkenlere nesneler üzerinde özellikler koymaya zorladı. Önemli bir sorun değil, bana sorarsanız çok temiz değil.VB'de yapabileceğiniz gibi C# değerine ref yerine bir parametrenin geçirilmesi için bir parametre zorlamak için bir yol var mı?

Farkında olmadığım sözdizimsel bir çözüm olup olmadığını merak ediyorum. Ben önlemek istiyorum benim şimdiki desen bir örnek olarak

: VB6 ve VB.NET yılında

var tempSomeObject = BarObject.FooProperty; 
SomeVb6BusinessLogicMethod(ref tempSomeObject); 
// Continue to do work and set other temp objects due to ref constraint 

yapabilirsiniz sadece bunu ByRef parametresine ByVal zorlamak için aşağıdaki.

SomeVb6BusinessLogicMethod((BarObject.FooProperty)) 'Note the extra parens 

DÜZENLEME: Ben ByRef ve ByVal arasındaki farklar hakkında istemiyorum. C# bir ByRef parametresini ByVal geçmek için zorlamak için benzer bir yol olup olmadığını soruyorum. VB.NET işlevselliğinin bu MSDN belgesine bakın.http://msdn.microsoft.com/en-us/library/chy4288y.aspx

+0

C# param türü içinde bu doğru karar verir? – NMK

+0

Yöntem, yöntemde değişiklik yapmaya çalışırsa ne olur? VB.NET'te bunun nasıl çalıştığını tam olarak anlayamadım ... – Cameron

+3

Her nasılsa şüphe duyuyorum, geriye dönük uyumluluk gibi bir şey gibi geliyor VB.NET –

cevap

5

Değeri yeni bir değişkene açıkça kopyalamanız ve sorunuzda gösterdiğiniz gibi referans ile yeni değişkeni göndermeniz gerekir. C# 'de sözdizimsel bir şeker yoktur, bu da derleyicinin bu kopyayı sizin adınıza VB'de yapıldığı gibi gerçekleştirmesine izin verir.

+0

Lame. Gerçekten yeni bir numara öğrenebileceğimi umuyordum. Oh iyi. Bu her yerde bunun için bir cevap bulamadığım için mantıklı. Teşekkürler. – TyCobb

+0

@TyCobb Bu konuda C# 6.0 ile ilgili yeni bir özellik olduğunu hatırladım, ancak burada * özellikle büyük bir gelişme olmamasına rağmen. – Servy

+0

Bildiri ifadeleri yakın zamanda rafa kaldırıldı: https://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Home –

İlgili konular