Anasayfa » Csharp

Csharp Property Nedir, Nasıl Kullanılır?

7 Aralık 2011 2.893 kez okundu Yorum yok
1 Star2 Stars3 Stars4 Stars5 Stars (Henüz hiç oy kullanılmadı. İlk oyu siz verin.)
Loading...

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

?View Code CSHARP
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

?View Code CSHARP
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.

?View Code CSHARP
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.

?View Code CSHARP
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.

?View Code CSHARP
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.

?View Code CSHARP
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

?View Code CSHARP
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.

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.