Respond needs javascript to run. To find out more click here
C# » Sayfa 7 » Serdar Demir
RSS
 

Archive for the ‘C#’ Category

C# ta serialization ve deserialization işlemleri

07 Mar

C# ta serialization ve deserialization işlemleri

C# t serileştirme işlemleri: Oluşturduğumuz nesnelerin bilgilerini içeriğini bilgisayarımızın herhangi bir yerine kaydederek depolama işlemi olarak açıklayabiliriz.

.Net içerisinde çeşitli serileştirme yöntemleri vardır (binary, xml, SOAP) biz binary yani ikili serileştirmeyi inceleyelim.

Öncelikle serileştirme yapacağımız sınıfın ISerializable interfaceni desteklemesi gerekir. Binary serileştirme diğer serileştirmelere göre daha hızlıdır fakat içeriğini 2’lik sistem de olduğu için okuyamayız. Binary serileştirme işlemini yapabilmek için System.Runtime.Serialization.Formatters.Binary kütüphanesini ekliyoruz. Basit bir class yazarak bunu binary formata dönüştürüp bilgisayarımıza kaydedelim.

[Serializable]

class İsci

{

public int Maas;

public string AdSoyad;

public DateTime DogumTairihi;

}

Classımızı oluşturduk;

İsci yeni = new İsci();

yeni.Maas = 1000;

yeni.AdSoyad = “serdar demir”;

yeni.DogumTairihi = new DateTime(1988, 04,14);

FileStream yaz = new FileStream(@”d:\isci.txt”,FileMode.Create);

BinaryFormatter obf = new BinaryFormatter();

obf.Serialize(yaz, yeni);

bu işlemi yaptığımızda d sürcüsüne isci nesnesinin bilgilerinin olduğu bir dosya oluşturduk. Fakat bu dosyayı açtığımızda okuyamıyoruz.

Şimdi de 2 li formattaki bu dosyamızı deserialize işlemiyle okuyalım (not:eğer bir sınıf içerisinde bazı üyelerin serileştirilmesini engellemek isterseniz NonSerialized yapmanız gerekir.)

İsci yeni = new İsci() ;

FileStream oku = new FileStream(@”d:\isci.txt”, FileMode.Open);

BinaryFormatter obf = new BinaryFormatter();

yeni = (İsci)obf.Deserialize(oku);

MessageBox.Show(yeni.Maas + “,” + yeni.AdSoyad + “,” + yeni.DogumTairihi, “Deserialize İşlemi”);

Serileştirme işleminde hız ve boyut önemli oldugu için 2 li serileştirme tavsiye edilir. Xml formata çevirmek büyük datasetlerin oldugu durumlarda hem boyutu büyük hem veriye ulaşma uzun sürebilir.

 
No Comments

Posted in C#, Makaleler

 

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

 

C#’ ta uygulama kısayolu oluşturma

06 Mar

Kısayol SimgesiArkaplan-Resmi:com sitemi biliyor musunuz, bilmiyorum ? Eğer biliyorsanız bu site için yaptığım duvarkağıdı değiştiriciyi belki görmüşsünüzdür. Tee 10 ay önce yapmıştım o programı. Eksikleri çoktu hatta yeni bir sürüm üzerinde çalışıyordum. Bu arada eski sürümünü de güncelleyeyim dedim ki, şu yüzden: son zamanlarda indiren kişi sayısı anlayamadığım bir şekilde arttı. Bende yarım yamalak çalışan bir program kullanmasınlar diye eski sürümü güncelledim.

Yine başlangıç kısmı fazla uzun sürdü.

Sadete geleyim, programımın en büyük sorunu UAC engeline takılmasıydı. Çünkü ben programı Kayıt Defterinden başlangıç programlarına kendisini ekleyecek şekilde ayarlamıştım ve bu ayara erişmek için Yönetici izni gerekiyordu. Bugün düşündüm, bunu yapacağıma daha az gürültülü bir yol daha var: Başlat menüsünde ki Başlangıç içerisinde link yerleştirmek. Evet, konuya yaklaştığımızı sizde farketmişsinizdir. Bende araştırdım “bu nasıl yapılır?” diye. Karşıma iki yöntem çıktı, birincisi daha profesyonelce, ikinicisi ise gayet basit. İkisini de anlatayım.

1. Yol

Windows içerisinde ki bir COM nesnesinden faydalanıyoruz. Öncelikle Solution Explorer’ da References’ ın içerik menüsünden Add Reference’a tıklıyoruz. Sonra bu listeden Windows Script Host Object Model’ i seçiyoruz.

Referans EklemeReferans Ekle Formu

Daha sonra aşağıdaki kodları kullanarak kısayolumuzu oluşturabiliriz.
En önce kütüphaneyi dosyaya dahil edelim :

  1. using IWshRuntimeLibrary;

Daha sonra;

  1. private WshShellClass WshShell;
  2. private void btnShortcut_Click(object sender, System.EventArgs e)
  3. {
  4. WshShell = new WshShellClass();
  5. // Kısayol değişkeni
  6. IWshRuntimeLibrary.IWshShortcut MyShortcut;
  7. // Kısayolu oluşturacağımız yolu seçiyoruz. (Kısayolun yeri)
  8. MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(@”C:\MyShortcut.lnk”);
  9. // Kısayolun hedefini belirliyoruz.

10.  // Burada uygulamanın çalıştırılabilir dosyası gösteriliyor. İsterseniz başka dosyanın yolunuda verebilirsiniz

11.  // Örnek : MyShortcut.TargetPath = @”C:\Windows\notepad.exe”;

12.  MyShortcut.TargetPath = Application.ExecutablePath;

13.  // Kısayol için açıklama. Çok gerekli değil ama koysanız iyi olur

14.  MyShortcut.Description = “Launch My Application”;

15.  // Kısayol simgesini belirtiyoruz. Bu satırı koymazsanız kısayolun simgesi uygulamanın simgesi ile aynı olur

16.  MyShortcut.IconLocation = Application.StartupPath + @”\app.ico”;

17.  // En son kayıt işlemi

18.  MyShortcut.Save();

19.  }
Birinci adım bu kadar.

2. Yol

Bu adım biraz daha kolay. Şöyle ki; normalde uygulamalar için kullanılan kısayol dosyaları(.lnk) çok karmaşıktır. Oysaki internet kısayol dosyaları(.url) çok basittirler. Bizde bir internet kısayolu oluşturacağız ama bu kısayolunun gideceği yer bilgisayarımızdaki bir dosya olacak. Evet yanlış duymadınız o bizim istediğimiz uygulama dosyası olacak.
Sizin için direkt kullanabileceğiniz bir fonksiyon vereyim

  1. private void KisayolOlustur(string link, string target)
  2. {
  3. string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
  4. if (File.Exists(linkName))
  5. {
  6. return;
  7. }
  8. using (StreamWriter writer = new StreamWriter(linkName))
  9. {
  10. writer.WriteLine(“[InternetShortcut]“);
  11. writer.WriteLine(“URL=file:///” + target);
  12. writer.WriteLine(“IconIndex=0″);
  13. string icon = app.Replace(‘\\’, ‘/’);
  14. writer.WriteLine(“IconFile=” + icon);
  15. writer.Close();
  16. }

17.  }
Kullanımı:

1.  KisayolOlustur(“Kısayol dosyasının konumu”, “Kısayol dosyasının hedefi”);
İşte bu kadar. Umarım işinizi görür. Eğer işinizi görürse beni de görürsünüz artık.