»
Y
A
N
M
E
N
Ü
«
C# 1 => 2 => 3
ibrahim dursun @ 5 Nisan 2008 15:27

C#’ın gelişmiyle birlikte söz diziminde (syntax) de bazı iyileştirmeler olduğunu heralde duymuşsunuzdur. Bu yazıda c# 1′den itibaren c# 3′e kadar ne gibi değişikler olduğunu kısaca bir toparlayalım.

Bahsedeceğim iyileştirmelerin bir çoğunun temeli C# 2′de atıldı. Örneğin C# 1′de bir formu kapatmak için bir butona event handler eklemek istediğimizde aşağıdaki gibi bir kod yazmamız gerekiyordu.

//C# 1
public Form1()
{
  InitializeComponent();
  button1.Click += new EventHandler(button1Click);
}
void button1Click(object sender, EventArgs e)
{
  Close();
}
Fakat c# 2′de ise metodu EventHandler delegate’i içine almamıza gerek kalmadı çünkü compiler bizim yerimize bunu yapıyordu. Dolayısıyla kodumuzu şu şekilde sadeleştirebildik.
public Form1()
{
  InitializeComponent();
  button1.Click += button1Click;
}
void button1Click(object sender, EventArgs e)
{
  Close();
}
C# 2 ile birlikte gelen Anonymous Delegate özelliği sayesinde ise yukarıdaki kodu şu şekilde kısaltabildik:
public Form1()
{
  InitializeComponent();
  button1.Click += delegate(object sender, EventArgs e) { Close(); };
}
Hatta anonymous delegate içinde geçilen parametreleri hiç kullanmadığımız için bunları yazmamıza da gerek yoktu:
public Form1()
{
  InitializeComponent();
  button1.Click += delegate { Close(); };
}
C# 2′de Genericlerin eklenmesiyle de aşağıdaki gibi kod yazabilmeye başladık.
string[] nums = new string[] { "1","2","3","4","5","6" };
int[] arr =Array.ConvertAll<string, int>(nums, delegate(string input)
                                                              {
                                                                  return int.Parse(input);
                                                              });
ConvertAll metodu string array ve string alıp int döndüren bir metod kabul ediyor. Fakat int.Parse metodu zaten string alıp int döndürüyor dolayısıyla yazımı şu şekilde sadeleştirebiliriz:
string[] nums = new string[] { "1","2","3","4","5","6" };
int[] arr =Array.ConvertAll<string, int>(nums, int.Parse);
Ve C# 3′de iyileşen type inference ve lambda expressionlar sayesinde yine bir kısaltma yapıp Type argumentlerden kurtulabiliriz:
string[] nums = new string[] { "1","2","3","4","5","6" };
var arr =Array.ConvertAll(nums, x=>int.Parse(x));
Hatta array oluşturma işini de şöyle yazabiliriz:
string[] nums = new [] { "1","2","3","4","5","6" };
//ya da kısaca:
string[] nums = { "1","2","3","4","5","6" };


Bir yorum bırakın

»  Substance: WordPress   »  Style: Ahren Ahimsa