.NET Framework 4.0 ile birlikte hayatımıza giren DLR'ın (Dynamic Language Runtime) temel olarak amacı static ve dynamic yapıların bir arada çalışabilir olmasını sağlamaktır. Bu özellik .NET projelerinde dinamik dillerdeki kütüphanelerin kullanılmasını sağlıyor.
DLR ayrıca IronPython gibi dinamik programlama dillerinin Common Language Runtime (CLR) ile iletişim kurmasını da sağlamaktadır. Bunun için dynamic anahtar kelimesi kullanılır.
DLR ayrıca IronPython gibi dinamik programlama dillerinin Common Language Runtime (CLR) ile iletişim kurmasını da sağlamaktadır. Bunun için dynamic anahtar kelimesi kullanılır.
Örneğimizde python dili ile "Hesap Classı" yazılacak olup class içerisine "topla-fark-print" işlerini yapacak olan metotlar dahil edilecektir. C# Console Projesi içerisinde python tarafında yazılmış olan class kullanılacaktır. C# dünyasında "Python" kodunu kullanabilmek için projemize IronPython kütüphanesini dahil etmemiz gerekmektedir.
Öncelikle boş bir C# Console Projesi aşağıdaki görseldeki gibi oluşturulur.
Python kodlarını yazabilmemiz için gerekli olan IronPython kütüphanesini projeye sağ tıklayıp gelen menüden "Manage Nuget Packages" seçeneğinden seçelim.
static void Main(string[] args)
{
var source = @"C:\Users\n.esendal\a\dynamicExample.py";
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
var oper = engine.Operations;
engine.ExecuteFile(source,scope);
var Hesap = scope.GetVariable("Hesap"); //classı kullandık
dynamic ins = oper.CreateInstance(Hesap);
Console.WriteLine(ins.topla(15,20));
Console.ReadKey();
}
Python uzantısı .py olacak şekilde aşağıdaki kodlarla hazırlanır. Adını "dynamicExample.py" olarak düzenlenir.
class Hesap():
def __init__(self):
pass
def topla(self,x,y):
return (x+y)
def fark(self,x,y):
return (x-y)
Bu python dosyasını uzantısı .py olacak şekilde bilgisayarıma kaydediyoruz.
Console projesine geldik ve python yolunu işaret edeceğimiz bir değişken tanımladık. Ve IronPython kütüphanesini "using Ironpython.Hosting;" kodunu ekleyerek kullanabiliriz.
Kodumuzu çalıştırırsak 15 ve 20 değerlerinin toplamı olan 35 sonucunu ekranda görürüz.
Python kodumuzda değişiklik yaparsak ekrana bilgi yazdıran kodu ekleyelim. (Python ve C# kodlarının son hali)
class Hesap():
def __init__(self):
pass
def topla(self,x,y):
return (x+y)
def fark(self,x,y):
return (x-y)
def yazdir(self,a):
print(a)
Main Kodlarında direkt olarak dynamic türünden tanımlanmış olan değişkeni kullanarak son eklediğimiz yazdir metodunu çağıralım.
static void Main(string[] args)
{
var source = @"C:\Users\n.esendal\a\dynamicExample.py";
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
var oper = engine.Operations;
engine.ExecuteFile(source,scope);
var Hesap = scope.GetVariable("Hesap");
dynamic ins = oper.CreateInstance(Hesap);
ins.yazdir(ins.fark(5, 15));
Console.ReadKey();
}