.Net'in en güzel özelliklerinden birisi, programcının yükünü minimuma indirmesidir. Bir önceki yazımda, Encapsulation kavramından bahsederken field'ı kapsülleyerek, get ve set adlı iki metot yardımı ile kontrolü sağlamıştık. .Net, bizim için bu iki metodu daha rahat kodlayabileceğimiz ve kullanabileceğimiz bir yapı hazırlamıştır. Bu yapı Property'dir (Özellik). Field'lar kapsüllenerek Property'ler yardımı ile dışarıya açılabilmektedir. Nesne Yönelimli Felsefeye göre hiçbir field public olmamalıdır. Doğru kodlama; field'ların private yapılarak, Property'ler yardımı ile dışarı açılmasıdır.
Şimdi Id, Ad ve Fiyat alanları olan bir Urun sınıfı tasarlayalım ve bu alanları kapsülleyerek Property'ler yardımı ile dışarıya açalım.
class Urun
{
int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
string _ad;
public string Ad
{
get { return _ad; }
set { _ad = value; }
}
double _fiyat;
public double Fiyat
{
get { return _fiyat; }
set { _fiyat = value; }
}
}
İpucu: Kapsüllenmek istenen field'ın üzerine mouse ile gelinerek, ctrl R+E kısayolu kullanılarak property'leri oluşturmak mümkündür. (ctrl tuşuna basılı olarak R'ye, daha sonra E'ye basılması yeterlidir. 3'üne de aynı anda basılmasına gerek yoktur.)
Yukarıda gördüğümüz gibi, her alan private olarak tanımlandıktan sonra, public property'ler yardımı ile kontrol altına alınmış oldu. set metodu gelen değeri field'a atarken, get metodu da field'ı return etmektedir. Aslında en önemlisi; kontrolün, nesnenin kendisini tarafından yapılmasıdır.
-Property, yazımı her ne kadar benzese de bir metot değildir, dolayısı ile () parantezlerini kullanamayız.
Field'lar ve Property'ler sınıfın 2 ayrı üyesidir. Sadece birbirlerini kullanmaktadırlar. Ayrıca şekilde görüldüğü gibi Property simgeleri, pembe renkli olan metot simgelerinden farklıdır.
Şimdi Fiyat Property'si içerisinde negatif değer girilememesi kontrolünü yapalım;
double _fiyat;
public double Fiyat
{
get { return _fiyat; }
set
{
if (value > 0)
_fiyat = value;
else
Console.WriteLine("Fiyat negatif olamaz");
}
}
Şimdi de Program sınıfında bir Urun nesnesi oluşturalım ve Fiyat Property'sine değer ataması yapalım;
class Program
{
static void Main(string[] args)
{
Urun u = new Urun();
u.Fiyat = -100;
Console.WriteLine(u.Fiyat);
}
}
Alacağımız sonuç, bir önceki yazıdaki uygulamamız ile aynı sonuç olacaktır;
Son olarak ILDASM yardımı ile Programın IL kodlarını inceleyelim ve Property'lerin içerisindeki get ve set metotlarının varlığını kanıtlayalım;
IL kodlarda görüldüğü gibi, arka tarafta bizim için get ve set metotları yazılmış durumda. Bu noktada Property'ler, programcıya sağlanan bir kolaylık olarak da düşünebilirler.
1 yorum:
Dependency Injection hakkında bilgi verebilirmisiniz
Yorum Gönder