31 Temmuz 2019 Çarşamba

C# DLR (Dynamic Language Runtime) Kullanımı

.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.



Ö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();

}
















Hiç yorum yok:

Yorum Gönder

SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...