Barner
  
YAZAR :Abdullah Tülü
ALANI :Php, Mysql
C# 3.0'ın Getirdiği Yenilikler

1.       “var” Deyimi :

C# 2.0 ile kodlama yaparken değişken tanımlaması sırasında değişken türü belirtmek zorundaydık. Ancak  C# 3.0 ile birlikte “var” deyimi ile tür belirtmeden değişken tanımlayabilmekteyiz. Derleme sırasında tür tahmini yapılmakta ve uygun alan bellekte tahsis edilmektedir.

 

C# 2.0 yazımı ile

 

int s=3;

Personel p=new Personel();

 

C# 3.0

 

var s=3; //Derleme aşamasında s isminde int veri türünde bir alan bellekte ayrıldı.

var p=new Personel(); //Derleme aşamasında Personel isminde bir nesne belleğin heap alanında oluşturuldu.

 

Bu atama türünde yapılan işlem değişkeni object olarak değerlendirmek değildir.  Burada değer ataması yapıldığı esnada değişkenin tipi belli olmaktadır. Bu sebeple :

 

var sayi;  //Geçersiz ifade. Çünkü var atamasında değer belirtilmek zorundadır.

var sayi=null; //Geçersizdir. Çünkü var atamasında değer null olamaz.

 

2.       İsimsiz Veri Tipleri (Anonymous Types)

C# 3.0 ile isimsiz veri tipleri oluşturabilir ve bunları kullanabiliriz. Gene var bildirimi bu amaçla kullanılmaktadır.

 

var ogrenciler = new {No=2;AdSoyad=”Osman ÇELİK”;Sinif=”8/A”}

 

Yukarıdaki tanımlama ile aslında IL (Intermediate Language) kodu içerisine aşağıdaki gibi bir sınıf oluşturulur.

 

class ogrenciler

{

                int no;

                string adSoyad;

                string sinif;

        public int No

        {

            get{return no;}

            set{no=value;}

        }

}

 

 

 

 

 

3.       Nesne ve Koleksiyonlara İlk Değer Ataması

public  class Ogrenci

{

public string Ad;

public string Soyad;  //Bunlar property’ler

public int No;

}

public class Personel

{

public string Ad;

public string Soyad;   //Bunlar property’ler

}

//Yukarıdaki gibi iki adet sınıfımız olsun…

 

Bu sınıfların nesne örneklerini aşağıdaki gibi oluşturabilmekteyiz. Aşağıdaki kodlar yardımı ile personel sınıfı türünden bir nesne oluşturulmuş ve Ad için “Ahmet” ve Soyad için “ÜSTÜN” değeri atanmıştır.

İsimler isimli bir string List tanımlanmıştır. Dikkat etmemiz gereken nokta ise henüz List tanımlanırken içerisine elemanlar atanmıştır. C# 2.0 ile biz bu işlemi List tanımlandıktan sonra Add() metodunu kullanarak yapıyorduk.

 

var personel=new Personel{Ad=“Ahmet”,Soyad=”ÜSTÜN”}

var ogrencim=new Ogrenci{Ad=”Osman”,Soyad=”ÇETİN”,No=23}

 

List<string> isimler = new List<string> {“Osman”,”Orhan”}

 

4.       Genişletme Metodlar (Extension Methods)

Genişletme metotları derlenmiş yada kod içerisinde bulunan herhangi bir veri tipini yeni metotlarla genişletme amacıyla eklenmiştir. Örneğin string sınıfına ToInt32 isminde bir metod ekleyebiliriz.

Genişletme metodları ile ilgili olarak bilinmesi gereken en önemli nokta statik bir sınıf içerisinde ve static olarak yazılmalarının zorunluluğudur.

 

namespace ExtensionMethods
{
      public static class MyExtensions
      {
            
public static int ToInt32(this string str)
            {
                  return Int32.Parse(str);
            }
      }
}

 

 

Bu sınıfı herhangi bir projemiz içerisinde kullanırsak derleyici sanki string türü için böyle bir metod varmış gibi davranıyor.

Genişletme metotlarının bildiriminde bulunan ve this öneki alan parametre genişletmek istediğimiz tipi ve metoda gönderilecek olan parametre değişkenini temsil etmektedir.

using ExtensionMethods;
class Program
{

      public static void Main
      {
               string str = "35";
               int a = str.ToInt32();
      }
}

 

Örneğin string sınıfının Substring metodunun sondan başlayacak şekilde düzenleyip adını EndSubstring() şeklinde bildirebiliriz. Örneğin str.EndSubstring(4); dediğimizde sondan itibaren 4 karakterlik alt bolumu geri dönecektir. Böyle bir metot aşağıdaki gibi tanımlanabilir.

 

namespace ExtensionMethods
{
      public static class MyExtensions
      {
            
public static string EndSubstring(this string str,int count)
            {
                  return str.Substring(str.Length- count, 4);
            }
      }
}