C# 4.0, yeni bir tür tanıtır: dinamik, bu statik bir tiptir, ancak bu tipin nesne örneği statik tip kontrol sürecini atlayabilir. Çoğu durumda, tip bir nesne sınıfı gibi çalışır. Derleme zamanında, dinamik bir sınıfın örneği herhangi bir işlemi destekler, bu yüzden nesnenin COM API'sinden mi yoksa IronPython gibi dinamik bir dilden, HTML DOM'dan, yansıtmadan mı yoksa programın başka bir yerinden mi alındığı konusunda endişelenmenize gerek yoktur. Ancak, kod geçersiz bir şey yaparsa, hata çalışma zamanında yakalanır. Örneğin, aşağıdaki kod parçasındaki örnek metod exampleMethod1 yalnızca bir parametreye sahiptir ve derleyici, derleme sırasında ec.exampleMethod1(10,4) çağrıldığında bunun geçersiz olduğunu tespit edebilir; Bu bir derleme hatasıdır. İkinci çağrı dynamic_ec.exampleMethod1(10,4) statik tipler için kontrol edilmez. Bu nedenle, derleyici derleme hatalarını bildirmez. Ancak böcek sonsuza kadar saklanmaz; Çalışma zamanında yakalanır ve bir çalışma zamanı istisnasını tetikler. statik boşluk Main(string[] args){ ExampleClass ec = yeni ExampleClass(); dinamik dynamic_ec = yeni ExampleClass(); dynamic_ec.exampleMethod1(10, 4); dynamic_ec.someMethod("bazı argüman", 7, null); dynamic_ec.nonexistentMethod();
} class ExampleClass { public ExampleClass() { } public ExampleClass(int v) { } public void exampleMethod1(int i) { } public void exampleMethod2(string str) { }
} İşte IronPython'u çağırmak için dinamik kullanmaya bir örnek:
IronPython.Hosting kullanılıyor; using Microsoft.scrip{filtering}ting. Sunuculuk;
Console.WriteLine("Yükleniyor random.py..."); scrip{filter}tRuntime py = Python.CreateRuntime(); dinamik rastgele = py. UseFile("random.py"); Console.WriteLine("random.py yüklendi!"); var items = Enumerable.Range(1, 7). ToArray();
için (int s = 0; s < 10000; s++) { random.shuffle(eşyalar); Console.Write("Sequence {0}: ", s); foreach (öğelerde int i) { Console.Write("{0} ", i); } Console.WriteLine();
}
Dinamik tip nesneleri veya ifadeler için, derleyicinin rolü, her ifadenin gerçekleştirmesi beklenen eylemleri kapsüllemek ve çalıştırma anında depolanmış bilgileri kontrol etmektir; geçersiz ifadeler bir çalışma zamanında istisna tetikler. Çoğu dinamik işlemin sonucu türü de dinamiktir. Örneğin, aşağıdaki örnekte fare işaretinizi testSum'un üzerine getirirseniz, akıllı prompt (yerel değişkenli) dinamik testSum gösterir. dinamik d = 1; var testSum = d + 3; Fare işaretçisini aşağıdaki testSum'un üzerine getirin. System.Console.WriteLine(testSum);
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.
COM birlikte çalışabilirliği C# 4.0, Office otomasyonu gibi geleneksel COM API arayüzleriyle birlikte çalışabilirliği artıran birkaç özellik içerir. Dinamik tipler, adlandırılmış parametreler ve isteğe bağlı parametreler de iyileştirmenin bir parçasıdır. Birçok COM yöntemi, parametrelerinin ve dönüş değerlerinin tip nesnesine ait olmasına izin verir, bu nedenle C# gibi güçlü tipli diller için çok sayıda zorunlu tip dönüşümü gereklidir. Ancak C# 4.0'da, derleme sırasında /link seçeneği eklerseniz, dinamik tip yeni bir etkiye sahiptir: COM arayüz yöntem imzasındaki nesne tipini (parametre tipi veya dönüş türü) dinamik sayır ve böylece çok fazla tür dönüşümü kaçınır. Örneğin, aşağıdaki ifade buna karşı çıkar. Dinamik kullanılmaz. ((Excel.Range)excel. Hücreler[1, 1]). Value2 = "İsim"; Excel.Range aralığı = (Excel.Range)excel. Cells[1, 1];
Dinamik bir dönemdi. Excel. Hücreler[1, 1]. Değer = "İsim"; Excel.Range aralığı = excel. Cells[1, 1]; |