Automatic 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 Initializers
Bir ö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 Initializers
Yine 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 Methods
Extension 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.