Kodu dinamik olarak derleme ve çalıştırma görevini basitleştirmek için SharpByte.Dynamic adlı bir paket yazdım . Kod, burada daha ayrıntılı olarak açıklandığı üzere uzantı yöntemleri kullanılarak herhangi bir bağlam nesnesinde çağrılabilir .
Örneğin,
someObject.Evaluate<int>("6 / {{{0}}}", 3))
3 döndürür;
someObject.Evaluate("this.ToString()"))
bağlam nesnesinin dizgi temsilini döndürür;
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
bu ifadeleri komut dosyası vb. olarak çalıştırır.
Örnekte görüldüğü gibi Çalıştırılabilirler, bir fabrika yöntemini kullanarak kolayca kazanılmış olabilir burada size gereken herhangi beklenen adlandırılmış parametrelerin kaynak kodu ve liste (jetonlar gibi üçlü köşeli parantez açıklaması kullanarak gömülü olduğu --all {{{0}} }, string.Format () ve Gidon benzeri sözdizimleriyle çakışmaları önlemek için):
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
Her yürütülebilir nesne (komut dosyası veya ifade) iş parçacığı açısından güvenlidir, depolanabilir ve yeniden kullanılabilir, bir komut dosyası içinden günlüğe kaydetmeyi destekler, zamanlama bilgilerini depolar ve karşılaşılırsa son istisnayı vb. ucuz kopyalar yaratmak, yani bir komut dosyası veya ifadeden derlenen çalıştırılabilir bir nesneyi başkalarını oluşturmak için şablon olarak kullanmak.
Önceden derlenmiş bir komut dosyası veya ifadeyi yürütmenin ek yükü, nispeten düşüktür, mütevazı donanımda bir mikrosaniyenin çok altında ve önceden derlenmiş komut dosyaları ve ifadeler yeniden kullanım için önbelleğe alınır.