Respond needs javascript to run. To find out more click here
reflection sınıfı » Serdar Demir
RSS
 

Posts Tagged ‘reflection sınıfı’

C#’ta reflection kullanımı

06 Mar

C# ile kod yazarken hep modüler programlamayı merak ederdim pek de kaynak yok bu konuda. Programlarımda dll ile çalışmak ve ilerde programın geliştirilmeye açık olması buna örnek olarak update veya eklentileri örnek verebiliriz.

Siz bir dll oluşturuyorsunuz başkası sizin dll nizi kopyalarak kendi programında kullanabiliyor. Modüler programlama denen şey bu heralde :) Aslında bu konuya yoğunlaşmam sinan arkadışım hala ne işe yaradığını çözemediğim Toplu adlandırıcı programının betasını :) incelememden sonra olmuştur.

Reflection sınıfı sayesinde .net ile yazılmış olan bir dll in bütün metodlarını kullanabilirsiniz ve hakkında bilgi sahibi olabiliriz. Şimdi basit bir örnek olarak adonet ile veritabanına bağlantı işlemini dll ile yapacağız Sql veritabanına bağlanmaya yarayan dll mizi kullanarak server adı ve veritabanı adını parametre olarak gönderip veritabanına bağlanacağız artık bu dll yi kullanarak sqlconnectionlar connecting stringlerle ugraşmayacaksınız :) bunu visual studio ile Reflection kütüphanesini kullanarak yapacağız. Öncelikle kütüphanemizi ekleyelim.

using System.Reflection;

Biz projemize dışarıdan bir dll ekleyeceğiz bu arada dll miz çalışma zamanında eklenecek bu bizim için önemli :)

Assembly asm = Assembly.LoadFile(@"C:\Users\serdar\Baglanti.dll");
Type[] tipimiz = asm.GetTypes();
ConstructorInfo[] ci = tipimiz[0].GetConstructors();
object obj = ci[0].Invoke(null);
MethodInfo mi = tipimiz[0].GetMethod("SqleBaglan");
object nesne = mi.Invoke(obj, new object[] { textBox2.Text, textBox1.Text });

Assembly Reflection kütüphanesine ait sınıf dll ve exe leri projemize yüklememizi sağlıyor.

Yukarıdaki kodu click olayına yazıyoruz.

1. adımda dll mizi çalışma zamanında yüklüyoruz.

2.adımda ise dll miz içerisindeki classların tiplerinin dizisini alıyoruz burda dizi yapmayıp asm.gettype(“ClassA”); diyebilirdik.

3. adımda ise kurucu fonkiyonumuzu alıyoruz birden fazla constructor olabilir bilgiğimiz gibi default constructor vb..

4. adım biraz karışık bu adımı ClassA yeni=new ClassA(); gibi yorumlayabiliriz yani o nesneden bir tane Default constructor oluşturmamızı sağlıyor.

5. adım 2 adımda classımızın tipini (adını) almıştık bu adımda bu tipin method bilgilerini alıyoruz. Method ismini biliyorsak burdaki gibi direk girebiliriz yada method dizisine atarak method ismine ulaşabiliriz.

son adımda ise o metodu çağırıyoruz  textbox 1 ve textbox 2 den parametleri göndererek.

Aşağıda da dllmizin içeriği

public void SqleBaglan(string veritabani,string server)
        {
            SqlConnectionStringBuilder ayar = new SqlConnectionStringBuilder();
            ayar.DataSource = server;
            ayar.IntegratedSecurity = true;
            ayar.InitialCatalog = veritabani;
            SqlConnection con = new SqlConnection(ayar.ConnectionString);
            con.Open();
            MessageBox.Show("connection open");
        }

Not: Refactor programını kullanarak exe ve dll dosyalarının methodları parametleri sınıfları hakkında bütün bilgileri kolayca kullanabilirsiniz (bi ne vi dll okuyucu diyebiliriz )

Refactor!

Refactor! for Visual Basic 2008 is a free plug-in from Developer Express Inc., in partnership with Microsoft, that enables Visual Basic developers to simplify and re-structure source code inside of Visual Studio 2008, making it easier to read and less costly to maintain. Refactor! supports more than 30 individual refactoring features, including operations like Reorder Parameters, Extract Method, Name Anonymous Type and many more!

Download Refactor! Now


 
No Comments

Posted in C#, Makaleler