SORU
16 Temmuz 2010, Cuma


Neden sabit C girmeleri yasaktır#

Özellikle C geliştiriciler için garip görünüyor. C durumuna yöntemi değiştirilmeyecek emin olmak için const parametre olarak işaretlemek için kullanılır. C özel nedenleri de ref geçmek ve devletin değişmez emin olmak için const ref pas gibi diğer vardır. Ama neden sabit yöntem parametreleri olarak mark veremeyiz C# ?

Neden böyle benim yöntem beyan edemem :

    ....  
    static void TestMethod1(const MyClass val)
    {}
    ....
    static void TestMethod2(const int val)
    {}
    ....

CEVAP
16 Temmuz 2010, Cuma


Diğer iyi cevaplar ek olarak, C-style C constness koymak için değil, neden daha ekleyeceğim#. Size " dedi

durumuna yöntemi değiştirilmeyecek emin olmak için parametre sabit olarak işaretliyoruz.

Eğer sabit aslında bunu yapsaydı, çok iyi olurdu. İnş öyle bir şey yapmaz. İnş yalan!

İnş aslında kullanabileceğim herhangi bir garanti sağlamaz. Sabit bir şey alır bir yöntem olduğunu varsayalım. İki kod yazar: kişinin yazmaarayankişi yazıaranan. Aranan yazarı yöntemi sabit kabul etti. İki yazar nesne hakkında sabit olduğunu varsayalım ne olabilir?

Hiçbir şey. Aranan inş fırlatmak ve nesne mutasyona ücretsiz, arayan yokgarantibir sabit götüren bir yöntem arıyorum aslında mutasyona uğrar. Benzer şekilde, aranan edemiyor nesnesinin içeriğini aranan eylem boyunca değişmez varsayalım; aranan bazı mutasyona yöntemiinş diğer adı olmayansabit nesne, ve şimdi sözde sabit nesne vardırdeğişti.

C-stil sabit nesne değişmez diye bir garanti sağlar, ve bu nedenle bozuldu. Şimdi, C zaten zayıf bir tür sistem içinde hangi sen-ebilmek yapmak bir yeniden yorumlama dökme bir çift içine bir int Eğer gerçekten istiyorsan, o yüzden olmaması gerekir bir sürpriz var zayıf bir tip sistemi ile ilgili inş. Bir olması için tasarlanmıştır ama C#iyiyazın sistemi türü bir sistem "bu değişken" değişken . bir dize içerir derken ^em>aslında içeren bir dize için bir referans(ya da boş). Biz kesinlikle "sabit" yazın sistem içine değiştirici . C-stil koymak istemiyorum ^em>tür sistemi bir yalan olmak istemiyoruz. Tür sistemi olmasını istiyoruzgüçlüböylecesebebi doğruhakkında kodunuzu.

C inşkılavuzve temel olarak anlamı, "bana böyle bir şey yok denemek için güvenebilirsin". Bu olmamalıtür sistemi; içindekilertür sistemibir olmalıdıraslındahakkında, bir neden olabilir nesnesi hakkındakılavuzkendi kullanımı için.

Şimdi, beni yanlış anlamayın; C sabit derinden kırıldı diye bütün kavram yararsız olduğu anlamına gelmez. Görmek isterdim aslındadoğruveyararlıformun "sabit" şerhi C# bir şekil olan insan ve Derleyiciler olabilir kullanmak için yardım anlamalarını kod, ve çalışma zamanı olabilir kullanmak için ne gibi şeyler otomatik paralellization ve diğer gelişmiş iyileştirmeler.

Örneğin, "eğer" kod ve söyle bir parça "ben . etrafında bir kutu çizin düşünün ^em>garantibu kod hunk bu sınıfın herhangi bir alan için başka mutasyon gerçekleştiren" derleyici tarafından kontrol edilebilir bir şekilde. Ya da yazan bir kutu "bu çizsafkutunun dışında gözlemlenebilir bir yöntem mutasyona nesnenin iç durumu ama herhangi bir şekilde değil". Böyle bir nesne güvenli bir şekilde çok kanallı otomatik olarak ama olabilirotomatik olarak memoized olabilir. Zengin iyileştirmeleri ve daha derin bir anlayış sağlayacak kod sergileriz ilginç açıklamalar her türlü vardır.Yolu daha zayıf C-stil sabit açıklama daha yapabiliriz.

Ancak, bu sadece olduğunu vurgulamakspekülasyon. Varsa bile öyle ya da böyle açıklamadık hangisi varsa. C herhangi bir varsayımsal gelecek versiyonunda yeni bir özellik, bu tür koymak için kesin bir planımız yok#, O bir şey görmek isterim, ve bir şey olduğu geliyor vurgu çok çekirdekli bilgi işlem gerektirebilir, ama hiç biri bu olmalı hiçbir şekilde yorumlanacak bir tahmin ya da bir garanti herhangi bir özellik ya da gelecekteki yönü için C#.

Şimdi, Eğer istediğin sadece bir açıklama üzerinde yerel değişken bir parametre diyor "değeri bu parametre değiştirmez boyunca yöntemi", sonra da, tabii, çok kolay. Destek olabiliriz "salt okunur" bir kez başlatılan olacağını yerliler ve parametreleri, ve bir derleme yöntemini değiştirmek hata. Değişken "ifadesi zaten böyle bir yerel; tüm yerli ve parametreleri için isteğe bağlı bir açıklama onlar gibi hareket yapmak için ekleyebilirsiniz" "değişkenleri kullanarak ilan Asla asla uygulanmadı çok yüksek öncelikli bir özellik oldu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012