Csharp Property Nedir, Nasıl Kullanılır?
Csharp ile kod yazarken sınıf içerisindeki private değişkenlere erişim sağlamak için get ve set metodları yazarız. Property ler işte bu noktada devreye giriyor. Get ve set metodu yazmadan private elemanlara erişmemizi sağlıyor.
Örnek olarak yazımızın ilerleyen kısımlarında hazırlayacağımız faktoriyel classının temellerini atalım
using System; namespace property { class faktoriyel_class { int factoriyel_degeri; public int faktoriyel { get { return factoriyel_degeri; } //public int get_factoriyel() metodu yerine kullanılan property set { factoriyel_degeri = value; } //public void set_factoriyel( int value ) metodu yerine kullanılan property } } } |
Gördüğümüz gibi private değer olan factoriyel_degeri değişkenini get ve set propertyleri yardımıyla kullanabiliyoruz. Kodumuzu denemek için main classımızı yazalım
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace property { class Program { static void Main(string[] args) { faktoriyel_class fakt = new faktoriyel_class(); fakt.faktoriyel = 4; Console.WriteLine(fakt.faktoriyel); } } } |
Main metodumuzun içerisinde faktoriyel değişkenini sanki public değişkenmiş gibi kullanabiliyoruz. Şimdi faktoriyel classımızda bazı kontroller yapalım, Örneğin faktoriyel değerimiz sıfıdan küçük olmasın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | using System; namespace property { class faktoriyel_class { int factoriyel_degeri; public int faktoriyel { //public int get_factoriyel() metodu yerine kullanılan property get { return factoriyel_degeri; } //public void set_factoriyel( int value ) metodu yerine kullanılan property set { if (value < 0) Console.WriteLine("Girdiğiniz değer 0 dan küçük olamaz"); else factoriyel_degeri = value; } } } } |
Peki faktoriyel classı yazdık, görevini yerine getirsin öyleyse, get propertysi içine de faktoriyel hesabı yapan kodlarımızı yazalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | using System; namespace property { class faktoriyel_class { int factoriyel_degeri; public int faktoriyel { //public int get_factoriyel() metodu yerine kullanılan property get { int sonuc = 1; for(int i=1;i<=factoriyel_degeri;i++) { sonuc *= i; } return sonuc; } //public void set_factoriyel( int value ) metodu yerine kullanılan property set { if (value < 0) Console.WriteLine("Girdiğiniz değer 0 dan küçük olamaz"); else factoriyel_degeri = value; } } } } |
Peki get ve set propertylerinde herhangi bir kontrol ve işlem yapmak istemiyorsak? O zaman en kısa haliyle kullanabiliriz.
1 | public int faktoriyel {get; set;} |
İstersek değişkenimizi read only veya write only yani sadece okunabilir veya sadece yazılabilir yapabiliriz. Bunun için get ve set propertylerinden birini silmek yeterlidir. Örneğin sonucumuzun bir fazlasını döndüren bir property yazalım sadece get property si olacak, set property sine gerek yok.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | using System; namespace property { class faktoriyel_class { int factoriyel_degeri; int sonuc; public float faktoriyel_plus_one { get { return sonuc + 1; } } public int faktoriyel { //public int get_factoriyel() metodu yerine kullanılan property get { sonuc = 1; for(int i=1;i<=factoriyel_degeri;i++) { sonuc *= i; } return sonuc; } //public void set_factoriyel( int value ) metodu yerine kullanılan property set { if (value < 0) Console.WriteLine("Girdiğiniz değer 0 dan küçük olamaz"); else factoriyel_degeri = value; } } } } |
Bu durumda main classımız
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace property { class Program { static void Main(string[] args) { faktoriyel_class fakt = new faktoriyel_class(); fakt.faktoriyel = 5; Console.WriteLine(fakt.faktoriyel); Console.WriteLine(fakt.faktoriyel_plus_one); //fakt.faktoriyel_plus_one = 4; set property miz olmadığından hataya sebep olur } } } |
son satırda dikkat ederseniz fakt.faktoriyel_plus_one = 4; şeklinde kullanıma izin vermiyor. Çünkü set property si tanımlamadık.
İşte bu noktalar bize nesne yönelimli programlamada private elemanlara erişimi sağlayan araçlardır. Kodumuzu kısaltan ve encapsulation olayını daha da güzelleştiren noktalardır.
Bunlara da Göz Atmak İsteyebilirsiniz.
<<< Önceki: Csharp Delegate (Temsilci ) Kullanımı
Sonraki: Csharp ref, out ve params Kullanımı >>>
Yorum Bırakın!