Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 21258|Yanıt: 0

[Kaynak] C#'da dinamikin doğru kullanımı

[Bağlantıyı kopyala]
Yayınlandı 7.07.2016 10:15:06 | | |
dinamik, FrameWork 4.0'ın yeni bir özelliğidir. Dinamikin ortaya çıkışı, C#'a zayıf bir dil tipinin özelliklerini kazandırmıştır. Derleyici artık derleme zamanında tipi kontrol etmez ve dinamik nesne, derleme zamanı varsayılan olarak istediğiniz herhangi bir özelliği destekler. Örneğin, GetDynamicObject metodunun döndürdüğü nesne hakkında hiçbir bilginiz olmasa bile, böyle bir kod çağrısı yapabilirsiniz ve derleyici hata bildirmez:




Doğru kullanım söz konusu olduğunda, önce bir yanlış kullanım belirtilmelidir:

İnsanlar genellikle dinamik ile karşılaştırmak için var anahtar kelimesini kullanır. Aslında, var ve dinamik tamamen iki kavramdır ve hiç birlikte karşılaştırılmamalıdır. Derlendikten sonra, derleme süresi var değişkeninin gerçek tipiyle otomatik olarak eşleşir ve değişkenin bildirisini gerçek tiple değiştirir; bu da kodlama sırasında gerçek tipi ilan ediyormuş gibi görünür. Dinamik derlendikten sonra aslında bir nesne tipi olur, ancak derleyici dinamik tipe özel bir yaklaşım gösterir; böylece derleme sırasında herhangi bir tür kontrolü yapmaz, sadece tür kontrolünü çalışma zamanına koyar.

Bu, Visual Studio'daki editör penceresinde görülebilir. VAR olarak ilan edilen değişkenler "akıllı algı"yı destekler çünkü Visual Studio var türlerinin gerçek türünü çıkarabilirken, dinamik olarak ilan edilen değişkenler "akıllı algı"yı desteklemez çünkü derleyici çalışma zamanının türü hakkında hiçbir şey bilmez. Dinamik değişkenler için Intelligent Sense kullanmak "Bu eylem çalışma zamanında çözülecek" diye soruyor.

Dinamik değişkenin bir nesne değişkeni olması IL kodu ile doğrulanabilir ve IL kodu burada paylaşılmaz. Elbette, derleyici ayrıca doğrudan nesne değişkenlerini ayırt etmek için dinamik bildirimleri de işliyor.

dinamik, MSDN'de birlikte çalışabilirliği basitleştirmek için yaygın olarak işleniliyor ve bazı geliştiricilerin yanlış anlaşılmasının buna dayandığını düşünüyorum: çünkü birçok geliştirici COM+ ve OFFICE ikincil geliştirme gibi kodlamaları nasıl kullanacağını bilmediği için, acilen dinamik bir uygulama nedenine ihtiyaçları var. Günlük gelişimde, dinamikin değerli olduğunu düşünüyorum:

Tip dönüşümü
Dinamik tip örnekler ile diğer örnek türleri arasında geçiş yapmak basittir ve geliştiriciler dynmic ve dinamik olmayan davranışlar arasında kolayca geçiş yapabilir. Herhangi bir örnek örtük olarak dinamik tip bir örneğine dönüştürülebilir, aşağıdaki örneğe bakınız:
dinamik d1 = 7;
dinamik d2 = "bir dize";
dinamik d3 = System.DateTime.Today;
dinamik d4 = System.Diagnostics.Process.GetProcesses();
Buna karşılık, örtük dönüşüm herhangi bir tür dinamiğine dinamik olarak uygulanabilir.
Ve tam tersi ise, herhangi bir tip dinamiği ifadesi örtük olarak diğer tiplere dönüştürülebilir.
int i = d1;
string str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;
Yöntemde dinamik tip parametreleriyle aşırı yük problemi
Bir yöntem dinamiği tipli bir nesneyi geçiriyorsa veya çağrılan nesne tip dinamik ise, aşırı yük yargısı derleme zamanında değil, çalışma zamanında gerçekleşir.
Dinamik dil çalışma zamanı DLR
Dinamik dil çalışma zamanı. NET Framework 4 Beta 1, C#'da dinamik tipleri destekleyen ve ayrıca IronPython ile IronRuby gibi dinamik programlama dillerini uygulayan yeni bir API setidir.
dinamik, yansımaları basitleştirir.

Daha önce şöyle yansımalar kullanıyorduk:



Şimdi yazmanın basitleştirilmiş bir yolu var:


Böyle basitleştirmeyi küçümsüyor olabiliriz, sonuçta kod çok fazla azaltılmamış gibi görünüyor, ancak verimlilik ve güzellik gibi iki özelliği dikkate alırsak, dinamikin avantajları açıktır. Derleyici, dinamiki önbelleksiz yansıtma verimliliğinden çok daha hızlı optimize eder. Karşılaştırmanız gerekirse, yukarıdaki iki kodun kodunu (Yöntem Ekle kısmı çağrısı) 1000000 için çalıştırarak bir sonuca varabilirsiniz.






Önceki:mvc, gönderi için JSON XML verilerini getirir
Önümüzdeki:Bir tanıma hatası meydana geldi. 1. Hattı yakınında, 10. sütun
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com