C# Property (Get ve Set) Nedir? Özellikleri Nelerdir? Tipleri Nelerdir?

Burada en çok sorulan soru şudur: Property (özellik) ile değişkenin arasında ki fark nedir?

Property’ler değişkenlerin gelişmiş metot halidir. Kısacası değişken/data üzerinde kontroller veya doğrulama işlemleri yapabilerek datayı saklama ve sunma olanağı gösteren yapılardır.

Diğer bir deyişle property (özellik), değişken ve metodun birleşimi gibidir ve bu saklama ve sunma işlemini sahip olduğu iki özelliği ile gerçekleştirir Get ve Set.

Get: Datayı değişken üzerinden okurken kullandığımız metot.

Set: Datayı değişken üzerine yüklerken kullandığımız metot.

Şunu da belirtmek isterim Property (Özellikleri) tam olarak anlamak istiyorsak Encapsulation (Kapsülleme) kavramını da iyi anlamak gerekir. Encapsulation anlamı, “hassas” verilerin kullanıcılardan gizlendiğinden emin olmaktır. Dataları saklarken ve sunarken güvenliğini/kontrolünü sağlamaktır. Property (Özellik) kullanımının altında yatan temel amaçta encapsulation işlemini uygulamaktır.

Property (Özellik) Örneği

Bu senaryomuzda öğrenci bilgilerini kontrollü bir şekilde içeri alacağımız değişken yapılarına ihtiyaç duyduğumuz bir öğrenci sınıfı olduğunu düşünelim. Burada kontrollü bir şekilde kavramını duyduğumuzda aklımıza gelecek konu encapsulation’dur. Değişken üzerinde kontrolü sağlayacağımız yapı ise Property’dir.

Örneğimizde öğrencinin Id, Adı ve Yaş bilgilerine ihtiyacımız var. Adı ve Yaş bilgilerinde ise şu kontrolleri yapmak istiyoruz. Öğrenci adını nasıl girerse girsin biz gösterirken tüm karakterlerini büyük göstermek istiyoruz. Yaş bilgisinde ise 35 yaş kontrolü yapmak istiyoruz öğrencinin yaşı 35 den büyük olamaz.

Bu durumda property lerin get set metotları üzerinde gerekli kontrolleri yaparak değişken atamalarını gerçekleştirebiliriz.

internal class Program
{
    private static void Main(string[] args)
    {
        Student student = new Student();
        student.Id = 1;
        student.Name = "Fatih";
        student.Age = 36;

        Console.WriteLine($"Öğrencinin Adı: {student.Name}, Yaşı: {student.Age}");
    }
}
public class Student
{
    //Fields
    private string name;
    private int age;

    //Properties
    public int Id { get; set; }
    public string Name 
    {
        //Burada Set metodunda girilen değeri direk değişken üzerine atanmasını sağlıyoruz.
        //Get metodunda ise değişkenin gösterilirken ToUpper metodu ile büyük karakter olarak gösterilmesini sağlıyoruz.
        get { return name.ToUpper(); }
        set { name = value; } 
    }
    public int Age 
    {
        //Set metodunda kontrollü bir şekilde data değişkene atandığı için Get metodunda herhangi bir kontrol işlemi gerçekleştirmiyoruz.
        get { return age; }
        set 
        {
            //Burada gelen yaş değerini Set metodu içerisinde kontrolünü sağlıyoruz eğer yaş 35 den küçükse değişken atamasını gerçekleştiriyoruz 35 den büyük ise kullanıcıya bir uyarı mesajı veriyoruz.
            if (value <= 35)
            {
                age = value;
            }
            else
            {
                Console.WriteLine("Student age can not be older than 35");
                age = 35;
            }
        }    
    }
}

Sonuç:

Student age can not be older than 35
Öğrencinin Adı: FATİH, Yaşı: 35

Property (Özellik) Tipleri

5 tip property (özellik) bulunur:

  1. Read-Write Property
  2. Read-Only Property
  3. Write-Only Proporty
  4. Static Property
  5. Indexer Property

1 – Read-Write Property

Okuma ve yazma işlemi yapabildiğimiz property’lerdir. Default olarak kullandığımız property yapıları read-write property yapılarıdır. Read işlemini Get metodu ile yapar Write işlemini Set metodu ile gerçekleştirir.

    public string Name 
    {
        get { return name; }
        set { name = value; } 
    }

2 – Read-Only Property

Sadece okuma işlemini gerçekleştiren property tipidir. Bu tip property kullanımı yapmak için iki seçeneğimiz vardır. 1) property set metodu kaldırılarak sadece get metodu kullanılarak yapılır. 2) set metodunun access modifier(erişim belirliyicisi) private olarak işaretlenir.

Read-Only özelliği, bir değişkenin değerini alabileceğiniz, ancak değişkene bir değer atayamayacağınız anlamına gelir.

    Yontem-1
    public string Name 
    {
        get { return name; }
    }

    Yontem-2
    public string Name 
    {
        get { return name; }
        private set { name = value; } 
    }

3 – Write-Only Property

Sadece yazma işlemini gerçekleştiren property tipidir. Bu tip property kullanımı yapmak için iki seçeneğimiz vardır. 1) property get metodu kaldırılarak sadece set metodu kullanılarak yapılır. 2) get metodunun access modifier(erişim belirliyicisi) private olarak işaretlenir.

    Yontem-1
    public string Name 
    {
        set { return name; }
    }

    Yontem-2
    public string Name 
    {
        private get { return name; }
        set { name = value; } 
    }

4 – Static Property

Statik bir property, yalnızca class’ın statik üyelerine erişmek için kullanılabilir.

public class Person
{
    private static int wage = 180;

    public static int NumberofObjects
    {
        get
        {
            return wage;
        }

        set
        {
            wage = value;
        }
    }
}