26 Ekim 2009 Pazartesi

StringBuilder

I. Versiyon

string s1 = "deneme";
for(i = 0; i < 10 ; i++)
{
         s1 += i.ToString();
}

II. Versiyon

StringBuilder s1 = new StringBuilder("deneme");
for(i = 0; i < 10 ; i++)
{
          s1.Append(i)
}

bu iki kod parçasına bakılırsa biri String'e String ekleyerek yeni String oluşturarak diğeri ise StringBuilder classını kullanarak bu class'ın Append metoduyla ekleyerek ayni sonucu veriyor. Fakat aralarında önemli bir fark var. String'ler değişmezdir yani bir kere yaratıldıklarında üzerlerinde değişiklik yaptığımızda bu değişiklik üstüne eklenmez bellekte yeni bir String oluşur. Yani örneğimize bakarsak önce s1 "deneme" olarak geldi. Ardından for bir kez döndü ve sonuc "deneme0" oldu bu oluken deneme nesnesi hala belektedir ve "deneme0" için bellekte yeni bir yer açılır. Bu durum bizim örneğimizde 10 kez dönüyorsa bellekte 10 String için yer demektir bizi şimdilik çok etkilemez ama daha büyük sayılı döngülerde işimizi zorlaştıracaktır.

Bu istenmeyen bellek yükünden kurtulmak için böyle durumlarda StringBuilder imdadımıza koşuyor. Nasıl koşuyor 1. örnekte bellekte 10 tane String oluşurken 2. örnekte sadece bir String oluşuyor. Çünkü değişken olmadığı için Append metodu ile string üzerinde istediğimiz gibi oynayabiliyoruz. Bu da bize büyük bir performans artısı sağlıyor.

Isimlendirme Kuralları

Isimlendirme kuralları diyince önemli 2 kural vardır:

PascalCasing
camelCasing

Bu kuralları açıklamadan önce isimlendirme yapılırken uyulması gerekenlere bakalım:

1- Isimlendirme yapılırken değişkene veya metoda ne ise ona verilen ismin başlangıcı harf veya alt tire olabilir.
2- Ilk harf alt tire ise yanına en az bir harf veya sayı getirilmelidir.
3- Her isim sadece harf,sayı veya alt tireden oluşur.
4- Isimlendirme yapılırken C# ın kullandığı anahtar kelimeler kullanılmaz mesela string adında bir değişken tanımlayamayız.

PascalCasing : Bu isimlendirme metodunda Pascalcasing veya Pascal_Casing yazmak yerine iki veya daha fazla kelimeli isimlendirmelerde her kelimenin baş harfını büyük ve kelimeleri bitişik yazma esas alan bir metoddur.

PascalCasing'i kodumuzda

- Class
- Metod
- Property
- Event
- Namespace

yazarken kullanmalıyız.


camelCasing : Bunun PascalCasing'den farkı bu metotda ilk kelime hariç tüm kelimelerin ilk harflerinin büyük ve bitişik yazılamasını esas alır.

camelCasing'i kodumuzda

- Değişken
- Parametre

yazarken kullanmalıyız.

Bu metodları kullanmak kodumuzu okunaklı hale getirdiği için uygulanması çok önemlidir. Ayrıca değişken olsun metod olsun bunları isimlendirirken işlevlerine uygun isim vermekte kodumuzu okunur kılacak olan önemli bir özelliktir. Bunlara dikkat edilmesi gerekmektedir.

Birden Çok Event'ı Tek Event Handler'a Bağlamak

Bu kısaca ne anlama geliyor ona bakarsak diyelim ki bir butonumuz var bu buton tıklama veya enter eventlarında ayni işi yapmasını istiyoruz bu durumda ikisi içinde ayrı event handler oluşturmak yerine ayni event handler içinde bu iki eventida kontrol edebiliriz. Bunun için bundan bir önceki konumuz olan Kod ile Kontrole EventHandler Ekleme yazısında öğrendiğimiz gibi oluşturduğumuz buttona [FormAdı].Designer.cs dosyasının içerisinde ki InitializeComponent() metodunun altına

this.button1.Click += new System.EventHandler(button1_Click);

yazarak 'button1_Click' altında yapmasını istediğimiz komutları yazarak tıklama eventını handle edebildik. Peki enter yapıldığında da enter eventını 'button1_Click' metoduyla handle etmek istesek ne yaparız? Bunun için ayni şekilde:

 this.button1.Enter += new System.EventHandler(button1_Click);

yaparak Enter eventinide  'button1_Click' metoduna bağlamış olduk. Artık hem tıklandığında hemde enter yapıldığında bu metodun içindeki kodlar çalıştırılacak.

14 Ekim 2009 Çarşamba

Kod ile Kontrole Event Handler Ekleme

Yine Visual Studio'nun eşsiz güzelliklerinden biri olan biliyorsunuz ki bir kontrole event eklemek için o kontrole iki kere tıklamak yeterli. Ama yine biz bunu kod ile yapmak istersek nasıl yapacapız?

Öncelikle [FormAdı].Designer.cs dosyasının içerisinde ki InitializeComponent() metodunun altına

                this.button1.Click += new System.EventHandler(this.button1_Click);

Eklememiz yeterlidir. Mesela burada buton kontrolüne tıklama eventini bağlıyoruz. Yine otomatik oluşturulan buton tıklanınca programın ne yapcağı ile ilgili metodu ise  [FormAdı].cs altına

                private void button1_Click(object sender, EventArgs e)
                {

                 }


şeklinde tanımlayıp programımızın butona tıklayınca neler yapmasını istiyorsak metodun blokları arasına o kodu yazmamız yeterlidir.

Anchor,Dock, Tabindex Kontrol Özellikleri

Anchor : Formu 'ekranı kapla' tıklandığında form üzerinde ki tüm textbox, label,listbox,panel vb.. varsa büyümesini daha doğrusu ekranı kaplayacak şekilde default halıyle hepsinin birbiri ile ölçeklenerek orantılı olarak sağ - sol - alt - üst nerelerden büyümesini istediğimiz ayar.

Dock : Form üzerindeki textbox, label vb.. alt - üst - sağ - sol - orta istebilen alanı kaplıcak şekilde forma yerleştirmeye ayarlayan özellik

Tabindex : Bu ekran üzerinde tab tuşuna basıldıkça hangi elemente gideceğinin sorasını belirtmek için kullanılır. Mesela bir butonun Tabindex'i 0 olsun sonra bir textbox ekleyelim bunun Tabindex'ini 1 yapalım sayfa açıldığında butona odaklanmış şekilde gelir taba basınca textbox'a geçer

Kod ile Kontrol Ekleme

Bir çoğumuz Visual Studio'nun çok büyük bir nimeti olan sürükle bıraka alışmışızdır. Fakat arka planda sürükle bırak yapınca hangi kodlar oluşturuluyor veya sürükle bırak yapmadan forma kontrol eklemek isteseniz ne yaparız?

Örnek olarak sürükle birak yapmadan forma bir buton eklemek istedik. Bu durumda [FormAdı].Designer.cs dosyamızın içine System.Windows.Forms.Button() altında bir buton nesnesi tanımlamalıyız.

           private System.Windows.Forms.Button button1; 

Ardından InitializeComponent() metodunun altına

           this.button1 = new System.Windows.Forms.Button();
           this.Controls.Add(this.button1);

dersek boş bir buton formun sol üst köşesinde yaratılmış olur. Bu butona özellikler vermek istersek. Yine InitializeComponent() altında


            this.button1.Location = new System.Drawing.Point(98, 71);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;


gibi propertieslerde Properties Window yerine kod içinde değiştirilebilir.
Share/Save/Bookmark