Microsoft .Net Framework 3.5, beraberinde bir sürü iyileştirme ve yeni dil özellikleri getiriyor. Bu yazıda an itibarıyla yayınlanan Beta 2 sürümü ile gelen özellikleri inceleyeceğiz. Microsoft .NET Framework 3.5 Beta 2 sürümü
bu adresten indirilebilir.
İnceleyeceğimiz özellikler:
1. Automatic Properties
2. Object Initializers
3. Collection Initializers
4. Extension Methods1. Automatic PropertiesAutomatic Properties (otomatik özellikler), uygulamalarımızda kullandığımız sınıfların (class) tanımlamalarında bize kolaylık sağlayan bir geliştirmedir. Bu geliştirme sayesinde private field'lar tanımlamadan property'lerimizi tanımlayabilir ve kullanabiliriz. Hemen örnekle açıklayalım. .Net 2.0 altında yazılmış bir Student sınıfımız olsun :
public class Student
{
private string name;
private string surname;
private int age;
private string studentNumber;
public string Name
{
get { return name; }
set { name = value; }
}
public string Surname
{
get { return surname; }
set { surname = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public string StudentNumber
{
get { return studentNumber; }
set { studentNumber = value; }
}
}
Görüldüğü gibi dört farklı property tanımlayabilmek için boşlukları saymazsak tam 27 satır kod yazdık. Bu sınıf .Net 3.5 altında Automatic Properties sayesinde şöyle yazılabilir :
public class Student
{
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
public string StudentNumber { get; set; }
}
Aynı sınıfı sadece 7 satır kod ile yeniden yazdık. Satır sayısının 27'den 7'ye indiğine dikkat edin.
.Net 3.5 C# derleyicisi bu şekilde tanımlanmış bir sınıf gördüğünde private field'leri bizim için otomatik olarak tanımlamakta ve ilgili public property'ler ile ilişkilendirmektedir. Yani kısaca, bir sınıf tanımlarken artık sadece property'leri tanımlamak yeterlidir. 30 küsur property içeren bir sınıf tanımladığınızda Automatic Property özelliğini çok seveceksiniz.
Bu özellik sadece C# derleyicisinde geçerlidir.
2. Object InitializersBir önceki örneğimizde tanımladığımız Student sınıfımızı kullanarak yeni bir Student objesi yaratalım. .NET 2.0 altında ilgili kod aşağıdaki gibi olmalıdır :
Student std1 = new Student();
std1.Name = "Ahmet";
std1.Surname = "Demir";
std1.Age = 19;
std1.StudentNumber = "8935";
Student std2 = new Student();
std2.Name = "Mehmet";
std2.Surname = "Yılmaz";
std2.Age = 18;
std2.StudentNumber = "3252";
Aynı işlevi gören kodu .NET 3.5 altında şöyle yazabiliriz:
Student std1 = new Student {Name="Ahmet", Surname = "Demir", Age = 19, StudentNumber = "8935"};
Student std2 = new Student {Name="Mehmet", Surname = "Yılmaz", Age = 18, StudentNumber = "3252"};
Bu özellik hem C# hem de VB derleyicilerinde geçerlidir.
3. Collection InitializersYine Student sınıfımızdan yola çıkarak şöyle bir senaryo geliştirelim. İki farklı öğrencinin bilgilerini tutan bir Generic List oluşturalım. Oluşturduğumuz bu List<Student>'i öğrenci bilgilerini kaydetmek veya güncellemek için kullanabiliriz.
.Net 2.0 altında List<Student> generic listemizi oluşturalım :
Student std1 = new Student();
std1.Name = "Ahmet";
std1.Surname = "Demir";
std1.Age = 19;
std1.StudentNumber = "8935";
Student std2 = new Student();
std2.Name = "Mehmet";
std2.Surname = "Yılmaz";
std2.Age = 18;
std2.StudentNumber = "3252";
List<Student> studentList = new List<Student>();
studentList.Add(std1);
studentList.Add(std2);
.....
.Net 3.5 altında aynı işlevi gerçekleştirelim :
List<Student> studentList = new List<Student> {
new Student {Name="Ahmet", Surname = "Demir", Age = 19, StudentNumber = "8935"},
new Student {Name="Mehmet", Surname = "Yılmaz", Age = 18, StudentNumber = "3252"}
};
Bu özellik hem C# hem de VB derleyicilerinde geçerlidir.
4. Extension MethodsExtension Methods, mevcut bir sınıfımızı, sınıfı oluşturan kod üzerinde hiçbir değişiklik yapmadan extend etmemize (geliştirmemize) yarayan çok kullanışlı bir geliştirmedir. Bir Extension method, mevcut bir CLR tipi üzerinde işlem yapmaya yarayan static bir metotdur. Ayrıca tüm extension metotları yine static tanımlanan bir sınıf içerisinde olmalıdır.
Hemen bir örnekle açıklayalım: Uygulamamız içinde vergi hesaplamaları yaptığımızı varsayalım. GetTaxNumber adında bir metodumuz olsun ve bu metot kendi içinde özel hesaplamalar yaparak aylık vergi tutarını döndürsün.
public static class CustomExtensionMethods
{
public static decimal GetTaxNumber(this int number)
{
decimal tax = 0.18M;
return (number * tax / 12);
}
}
Tanımladığımız metodumuzu kullanalım :
using CustomExtensionMethods;
public partial class testclass()
{
private void test()
{
int salary = 1000;
decimal taxMonthly = salary.GetTaxNumber();
}
}
Bu özellik hem C# hem de VB derleyicilerinde geçerlidir.
Bu yazıda Microsoft Net Framework 3.5'un yazılım dünyasına getirdiği yenilikleri ele aldık. Şüphesiz geliştirmeler sadece bunlarla sınırlı değil.
Implicitly typed local variables, Anonymous Types, Lambda expressions, Query expressions, Expression Trees gibi diğer önemli geliştirmeleri başka bir yazıda inceleyeceğiz.