Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

C# daki Property ve Field arasında ne fark var? - C#'da Özellik Tanımlama ve Sarmalama İlkesi

C# metinlerinde sınıf tanımlamaları konularında Property ve Field ifadeleriyle sıkça karşılaşıyorum.

Property, sınıfın özellikleri ama Field nedir? Aralarında ne gibi bir ilişki var?

Soran:04.06.16 17:29
misafir  

1 Cevap

0
property özellik, field alan demek.

Nesneye yönelik programlamanın üç temel ilkesinden biri olan sarmalamayı (encapsulation) uygularken kullanılıyoruz.

Sarmalama ilkesinde, bir sınıf tanımlaması içindeki değerleri tutan asıl değişkenlere (field) doğrudan erişimi engelleriz. Bu değişkenlere değer atamak için özelliklerden (property) yararlanırız. 

Bu değişkenlere değer atarken veya değerini istediklerinde tanımladığımız özellik bloğu otomatik olarak çalıştırılır. Biz de bu bloğun içinde değerleri test eder ve ondan sonra göndeririz veya değiştiririz.

Sınıfı kullanan kişi özelliklere doğrudan erişebilir. Alanlara doğrudan erişemez, erişmemelidir. Aksi halde istenmeyen değerleri bilerek veya yanlışlıkla atayarak sınıfımızın hatalı çalışmasına neden olabilirler.

public class Deneme
{
    // Bu bir alan (field). Asıl genişlik değeri bunda saklanacak. 
    private int genislik;

    // Bu (Genislik) bir özellik (property). Sınıfı kullanan bunu değiştirmek istediğinde
    // set ile tanımlanan blok, bunun değerini istediğinde get ile tanımlanan
    // blok otomatik çalıştırılır.
	
    public int Genislik
    {
	// Genislik özelliğinin değerini istediğinde...
        get
        {
	    // ... genislik alanının değerini gönder.
            return genislik; 
        }
	// Genislik özelliğinin değerini değiştirmek istediğinde...
        set
        {
	    // ... gelen değeri (value ile gelir) genislik alanına ata.
            genislik = value;
        }
    }
}

Tabi bu örnekte kontrol kısmı (ki asıl önemli konudur) yok. Sade olsun diye eklenmedi. Aşağıdakinde ise kontrol ediyoruz. Genellikle değer gönderirken (get bloğunda) varsa değer göndermeden önce yapılacak işler, testler veya ayarlamalar yapılır. Tabi varsa.

Asıl önemli olan set bölümü. Bu bölümde value ile gelen değeri kontrol ederiz ve eğer değer uygun ise alana atarız. Aksi halde bir hata fırlatırız veya varsayılan bir değeri atarız. Tabi değer atamadan önce veya sonra başka yapılacak işlemler de varsa onları da yapabiliriz.

public class Deneme
{
    private int genislik;

    public int Genislik
    {
        get
        {
            return genislik; 
        }
        set
        {
            if (value <= 0)
                throw new Exception("Deneme'nin genişliği 0'dan büyük bir değer olmalı.");
            genislik = value;
        }
    }
}
Örnekte set bölümünde gelen değer (value) 0 veya daha küçük ise bir hata fırlatıyoruz. Tabi varsayılan bir değer le de değiştirilebilir.

Peki kullanırken neler oluyor?

Örnek bir kullanım ve etkileri şöyle:

Deneme d = new Deneme();
d.Genislik = 10; // set bölümü çalışır ve value'nin değeri 10 olur.
int gen = d.Genislik; // get bölümü çalıştırılır ve genislik alanının değeri gelir.
d.Genislik = 0; // set bölümü çalışır, hata verir.



Cevaplayan: 14.06.16 20:38
canora
101,387p 4ü
Cevabı seçen: 15.06.16 00:25
canora   101,387p 4ü