2011-05-23 16 views
5

Geçtiğimiz günlerde C#/Mono'da belirli kavramlarla çalışırken "güvenli olmayan" seçeneğini belirtmem gerekmesi gerçeğine rastladım. Sadece kodumdaki seçeneği belirtmekle kalmıyor, aynı zamanda derlerken bunu belirtmek zorundayım, bu da "bu kodun doğal olarak güvensiz ve riskli olduğunu" hissettiriyor. Burada garip olan şey, DllImport'un güvensiz bayrağı gerektirmemesidir, bu yüzden "güvenli kodumda" istediğim segfault'leri oluşturabilirim. Göz ardı ettiğim güvenli olmayan kodlardan kaçınmanın bir sebebi var mı?Mono'da "güvenli olmayan" özelliğini kullanmaktan kaçınmanın bir anlamı var mı?

+0

Bunu, .NET Framework altında önlemek için aynı nedenlerden kaçınmalısınız. Skolima'nın güvensiz olduğunu belirttiği gibi, teoride kodla ilgili her şeyi halledeceksiniz. Bu, eğer temizlenemeyen bir şeyleri bellekte bırakmak istiyorsanız, tam olarak bunu yapabileceğiniz anlamına gelir. Ben yorum ile katılmıyorum DllImport olsa iyi bir fikir değil. –

cevap

7

DllImport, çoğu C# geliştiricisi için iyi bilinen bir kavramdır. Aynı zamanda segfault'un meydana gelebileceği nispeten küçük bir alan ile sonuçlanır. unsafe koduyla, rastgele çökmeleri çok daha kolay bir şekilde ve unsafe çağrısı ile ilgili olmayan yerlerde (dokunulduğunu düşündüğünüzün dışındaki bellek bölgelerini işleyerek) oluşturabilirsiniz.

Derleyici uyarılarına çok benziyor - bazı geliştiriciler bunlara dikkat etmiyor, bazıları "Uyarıları hata olarak kabul et" seçeneğini "Tüm" olarak gösteriyor. Kodda neyin daha kolay sonuçlanacağını tahmin et? Ayrıca, (potansiyel kırılma/kaçırılan hatalar/taşınabilirlik sorunları vb.) Önlenebilirse, DllImport'un kendisi de iyi bir fikir değildir ().

+1

Sağ. Temel olarak güvensiz bir blok tam olarak büyük bir kırmızı bayraktır ve "hey, bu kod aslında güvensiz ve risklidir!" Çünkü o; Güvenli muhafızları kapattınız çünkü güvensiz kodlar ilk etapta dağınıktı. – Andy