Bugün nereden elime geçtiğini şimdi hatırlamadığım Olaylar ve Delegate’ler hakkında bilgi verilen bir video'yu izledim. Bu video’yu çeken henüz mezun olmamış meraklı bir arkadaş olmayıp ekmeğini bilişim ve programcılık eğitimleri vererek kazanan tecrübeli birisi. Video’yu biraz inceleyince bu arkadaşın Event’ları anlatırken sürekli kavramları birbirleri ile karıştırdığını fark ettim. Tıpkı Her Gün Bir Yanlış yazı dizisinde değerlendirdiğimiz C# kitabında olduğu gibi mevcut Event’ları oluşturmaktan söz ediyordu bu eğitimci arkadaş. Hal bu ki bu tecrübeli arkadaş bırakın C# 3.0 kitabımı C#’a Başlangıç Kitabı adlı PDF’yi söyle bir gözden geçirmiş olsaydı Form sınıfının mevcut olaylarını anlatırken ikide bir Event oluşturmaktan söz etmezdi.


Etiketler : C#,Görsel Dersler

Malumunuz olduğu üzere .NET sınıfları Namespace olarak paketlenmektedir. Namespace’ler ise DLL dosyaları olarak gelmektedir. Yararlanmak istenen hangi DLL dosyasında veya referansta yer alıyorsa bu referansın Visual Studio’nun Solution Explorer penceresinde listelenmesi, konsolda derleme yapılıyorsa söz konusu DLL dosyasından yararlanılmak istendiği “/reference” parametresi ile işaret edilmesi gerekir. Tabi bunu 2 istisnası vardır; System.dll ve System.Core.dll dosyaları Visual Studion’nun Solution Explorer penceresinde listelenmese bile bu referanstaki Namespace’lerden dolayısıyla sınıf ve yapılardan yararlanılabilir. Bu nedenle aşağıda konsolda yapılan her 3 derleme işlev bakımından birbirinden farklı değildir.

 

 

 

Tekrar etmek gerekirse System.dll dosyasında çok sayıda Namespace bulunmaktadır. Örneğin IO bunlardan birisidir. Bu demektir ki C# uygulamaları dahilinde IO adlı namespace’teki sınıflardan yararlanmak için herhangi bir hazırlık yapmaya gerek yoktur.  Örnek üzerinde konuşmak gerekirse aşağıdaki gibi bir kod yazılıp istenen Text dosyasının içeriği okunup RichTextBox’ta görüntülenebilir. 

 

private void dosya_sec_Click(object sender, EventArgs e)

 {

  System.IO.FileStream akis;

  openFileDialog1.ShowDialog();

  string yol = openFileDialog1.FileName;

  akis = new System.IO.FileStream(yol, System.IO.FileMode.Open,

System.IO.FileAccess.Read);

  System.IO.StreamReader okuyucu;

  okuyucu = new  System.IO.StreamReader(akis);

  richTextBox1.Text = okuyucu.ReadToEnd();    

  okuyucu.Close();

  akis.Close(); 

}

 

Bu kodda yararlandığım FileStream ve StreamReader sınıflarıyla FileAccess ve FileMode numaralayıcıları(enum) IO adlı namespace’te, IO adlı Namespace ise System adlı namespace’in içinde yer aldığı için Class ve enum adlarından önce Namespace adını yazdım.

 

Kod dosyasının başına using System.IO; yazılırsa IO’daki sınıf, yapı ve enum’ları kullanmak için her seferinde sınıf adından önce namespace adını yazma zorunluluğu kalkar. Yani Stream sınıflarından yararlanmak için yazarımızın dediği gibi using System.IO; yazmak şart değildir ve System.IO bir kütüphane değil bir namespace’tir. Tabi System.IO demekle en son yazılan namespace’in işaret edildiğini ayrıca belirtmeye gerek yoktur.

 

Ayrıca kod dosyasının başına using System.IO; yazılsa bile uygulamaya dahil edilen bir şey yoktur ve System.dll dosyası yerinde yani GAC’de olduğu gibi durmaktadır. Türkiye’de Namespace ile kütüphaneyi(kütüphane genellikle DLL dosyası karşılığı kullanılmaktadır) birbirine karıştırmak veya bu konuda yanlış bilgiye sahip olmak “ileri düzey” C#, .NET uyumlu Visual Basic ve ASP.NET kitabı yazmaya engel değildir. Çünkü Türkiye'de teknik yanlışı bol şişirme kitaplara bir miktar talep var.

Etiketler : C#,Memik YANIK,Programcılık Kitapları,Core.dll,System.dll

Her gün 1 yanlış yazı dizisine devam ediyoruz. Dün #undef deyimi ile nasıl deklarasyon yapıldığını gördükten sonra bugün DLL dosyalarını çalıştırmaktan söz edeceğiz. Daha doğrusu burada adını anmadığım C# kitabının yazarına göre DLL dosyalarının nasıl çalıştırıldığına bakacağız.

Her ne kadar yazarımız kitabında DLL dosyalarının çalıştırılmasından söz etse bile şimdiye kadar çalışan DLL dosyasını kimse görmüş değildir.Çünkü DLL dosyaları başka programlar tarafından gerektiğinde belleğe dinamik olarak yüklenilen dosyalardır. Yazarımız kitabında DLL dosyalarını yeniden hazırlamayı yani Visual Studio sayesinde Build etmeyle çalıştırmayı birbirine karıştırmıştır.

Tabi istenirse .NET Framework ile birlikte gelen C# derleyicisinden yararlanıp konsolda DLL dosyası hazırlamak mümkündür. Diğer yandan DLL dosyalarının C#'a özgü olmadıklarını hatırlamak gerekir. DLL dosyalarının nasıl kullanıldığını aşağıda linki verilen makalede görebilirsiniz.

http://www.memikyanik.net/3-bolum-konsol-uygulamalari-makalesi/121.aspx

Etiketler : C# Kitapları

 

Daha önce yazmıştım; her kitapta teknik veya dil yanlışları olabilir. Önemli olan bu yanlışların sayısı ve önemidir. Yanlışsız kitap yazmak neredeyse imkânsız olduğu için hedefim hep az yanlışa sahip kitaplar yazmak oldu. Ne zaman okurun birisi kitabımdaki bir yanlışı ilettiğinde kendisine teşekkür edip söz konusu yanlışı ilk fırsatta düzeltme yoluna gittim.

 

Bir programcılık kitabının yanlışlarından söz edilecek bu yazı dizisini hazırlarken kendimi yazar Memik Yanık olarak değil okur yerine koydum. Yani adını burada anmadığım yazara diyorum ki “ey yazar arkadaş kitabında şu şu yanlışlar var, bir zahmet yeni baskıda bu yanlışları düzelt”. Bakalım yazar arkadaş iyi niyetli bu çalışmaya ne tepki verecek?

 

Bu yazı dizisinde yaklaşık 550 sayfalık bir C# kitabının yanlışlarını ortaya koyacağım. Bunu yaparken her gün kitabın bir sayfasını rastgele açıp o sayfadaki hatayı ve doğrusunu yazacağım. Bu hataların sayısı kaç olur şimdiden bilemem. Ancak bu sayının en az 25 olacağını şimdiden söyleyebilirim. Çünkü test amaçlı olarak yaptığım denemelerde her 5-10 sayfada bir yanlışa rastadım. Tabi söz konusu kitabın yanlışlarını ortaya koyarken yanlış yapmam ihtimal dahilindedir. Bu nedenle olası yanlışlarım için kitabın yazarından simdiden özür dilerim ve yanlışlardan söz ederken yapacağım yanlışlarımı düzeltmek için bir uyarının, bir mail'in yeterli olduğunu bilmenizi isterim. Burada sözünü ettiğim hatanın incelediğim kitabın hangi sayfasında olduğunu yazmayacağım. İşte söz konusu kitaptan alınıp anlamı korunup biraz değiştirilmiş bir cümle. 

"demirspor isimli değişken "#undef" komutu sayesinde deklare edilmiştir."

Bu cümlede yazarımız undef adlı önişlemci deyimiyle değişken deklare edildiğini yazmış. Gerçekte C# programlama dilinde #define önişlemci deyimi ile kodun başında veya derleme satırında parametreler kullanılarak sembol veya sabit tanımı yapılmaktadır. #undef deyimi ise bu sabitleri tanımsız duruma getirebilmektedir. Yani yazarımız yanılıyor:Çünkü undef deyimi ile deklarasyon yapılmıyor.

 

Diğer yandan #undef deyimi ile olmayan veya #define deyimi ile tanımlanmayan bir sabiti tanımsız duruma düşürmek istediğinizde C# derleyicisi "dur arkadaş bu sabit tanımlı değil ki tanımsız yapayım, sen olmayan bir şeyi bana yok et diyorsun" demiyor. Yazar arkadaşımız C# derleyicisinin azizliğine uğramış yukarıda verilen cümleyi kitabına almıştır.

Etiketler : C# Kitapları

En kapsamlı ve en kolay okunan C# 3.0 kitabının ilk 120 sayfasının kişisel sitemde yayınlanması tamamlandı. Yakın bir zamanda kimse para ödeyerek Türkçe C# kitabı almayı denemeyecektir. Çünkü en iyisi, en kolay okunanı ellerinin altında. Tabi bazı arkadaşlar diyecekler ki ben Türkçe kitaplar yerine İngilizce olanları tercih ediyorum diyeceklerdir. Bu arkadaşlara söyleyeceğim şudur: Bir kitap kötü kaleme alınmışsa ve zor okunuyorsa hangi dilde yazıldığının ne önemi var?

http://www.memikyanik.net/csharp-30-kitabi-makaleleri/24.aspx

Hele hele 2005 yılında yayınlanıp ve şişirildiği için tuğla kalınlığında olup yanlışlarda dolu olup farkında olmadan C# 2005 adını verdikleri C# 2.0 kitapları depolarda çürümeye devam edeceklerdir.

Etiketler :