Yaklaşık 1.5 yıl önce, o zamanlar C#’ ı yeni öğreniyordum, Kapatma Sayacından sonra yapacak program arıyordum. Hatırlıyorum, yaz tatilinde evde yapmıştım ilk Toplu Adlandırıcı uygulamasını. O zamanlar içerisinde sadece bir iki String fonksiyonu vardı ama her projem gibi bana bir şeyler öğretmeyi başarmıştı.
Şimdiki C# bilgim o zaman ki bilgimin 2-3 katı diyebilirim. Yani yeni program bence çok güzel bir uygulama oldu. Hatta üniversitelerde ders diye okutulmalı
.
Aslında ikinci TopAd fikri geçen sene aklıma gelmişti. Hatta bir arayüz, birkaç metod fln. da hazırlamıştım. Fakat, eksik bir şey vardı. Program istediğim gibi sonradan özellik kazandırılabilir değildi. Yani programı nasıl yaptıysam öyle devam edecekti. Programı geliştirmek istesem yine yüzlerce satır kod arasında boğulacaktım ve bunu sadece ben yapabilecektim. Başkasının da katkı yapabileceği bir program (yani modüler program – buna eklenti desteği de diyebiliriz) değildi ve o zaman böyle bir program yazamazdım.
Bu sene (hatta bir kaç hafta önce) System.Reflections üyeleriyle çalışma zamanında uygulamaya kütüphane dahil edilebildiğini öğrendim. Belki daha başlangıç ama yazının girişinde de dediğim gibi her uygulamam bana bir şeyler öğretmiştir.
Önce size bu konuda yüzeysel bir bilgi vereyim. Derinlemesine bilgi isterseniz size Projemi incelemenizi öneririm. Bir uygulamaya çalışma zamanında kütüphane eklemek için:
System.Reflections.Assembly asm = System.Reflections.Assembly.LoadFrom("kutuphane.dll");
metodunu kullanıyoruz. Peki bu kütüphane içerisinde ki sınıfları yani tipleri nasıl kullanıcaz. Bunun için:
Type tip = asm.GetType("MyClass");
metodunun döndürdüğü Type nesnesini kullanıyoruz. MyClass bizim kütüphanemizin içerisindeki bir sınıf. Bu Type nesnesi bizim kütüphanemiz içerisindeMyClass sınıfının bilgisini tutar. Ama biz bilgisini istemiyoruz kullanmak istiyoruz diyorsanız bunun biraz zahmetli olduğunu belirteyim. İlk önce bu tipinYapılandırıcı Fonksiyonlarının bir dizisini elde etmeliyiz. Sonra Invoke(object) metoduyla bu tipin bir nesnesini üreteceğiz.
System.Reflections.ConstructorInfo[] ci = tip.GetConstructors();
object obj = ci[0].Invoke(null);
Yukarıda ki kod sadece parametresiz Yapılandırıcı için geçerli. Parametreli yapılandırıcı için null yazan yere parametreleri yazmamız gerekiyor.obj nesnesi bizim kütüphanemizin içerisindeki ilk tip türünden bir nesne oluyor. Peki bu tip içerisindeki bir metodu çağırmak istersek ne yapacağız. Aslında yukarıdakine benzer bir şey yapacağız:
int i = 5;
System.Reflections.MethodInfo mi = tip.GetMethod("MyMethod");
object ret = mi.Invoke(obj, new object[] { i });
Yukarıda int MyClass.MyMethod(int) prototipine sahip bir fonksiyonun nasıl çağırıldığını anlattım. Invoke(object, object[]) metodunun ilk parametresi üstte elde ettiğimiz MyClass türünden bir nesne. İkinici parametresi ise bu metoda göndereceğimiz parametrelerin dizisi. Bir tane parametre bile göndersek yine dizi şeklinde göndermeliyiz. Basit bir i tam sayısını parametre olarak gönderiyoruz ve geriye dönen değeri ret nesnesine atıyoruz.
Basit olarak anlatımı bu kadar. Şimdi benim Toplu Adlandırıcı 2 programının özelliklerine bakalım.
- Eklenti Desteği (Eklenti yazmak ve işin püf noktalarını öğrenmek isteyenler bana mail gönderebilir – ssinanyil@gmail.com)
- Seçilen dosyalar içerisinde sıralama yapma. (ListViewSortManager için Eddie Velasquez’ e teşekkür ederim. Thanks man!
)
- Sürükle bırak desteği
- Dosyaları isimlendirmeden önce Önizleme özelliği
- Dosyaları isimlendirdikten sonra Geri Alma özelliği
- Ayrıca kodları da açık
- Sadece 552 KB ve taşınabilir
Ekran Görüntüleri :
Daha sonra ekleyeceğim, bu cafe bilgisayarında .NET yüklü değil anlaşılan
İndirmeler :
- Uygulama Çalıştırılabilir Dosyası için tıklayın. (86 KB – RAR arşivi)
- Proje dosyaları için tıklayın. (882 KB – RAR arşivi)
- Eklenti yazmak için gerekli kütüphaneyi indirmek için tıklayın. (4 KB – RAR arşivi)