Get ve set kavramları aslında temelde belli özelliklerin (property) yönünü belirtir diyebiliriz. Bir çoğumuzun bildiği üzere get, Türkçede => Almak, Set ise Türkçede => Ayarlamak anlamında kullanılmaktadır. Aslında yazılım dillerinde de durum hiç farklı değil. Türkçe karşılıklarının gerektirdiği şekilde kullanılmaktalar.
Peki yazılımda ayarlamak ve almak (get, set) kavramlarını ne için ve genellikle nerelerde kullanırız? Elbette belli bir kalıp halinde kullanıyoruz. Kalıptan kastım, aslında belli bir yordam için kullanıyoruz. Örneğin bir sınıfa ait bir değişken tanımladığımızı düşünelim. Değişkenimizin tipi karakter katarı (string) olsun. Bu değişkeni tanımlarken get ve set özelliğine sahip olduğunu, yani hem ayarlanabilir (set) hem de okunabilir (get) özelliğinde olduğunu da aşağıdaki gibi belirtelim.
public string TCIdentity { get; set; }
İşte bu şekilde tanımladığımızda “TCIdentity” isimli değişkenimizin hem ayarlanabilir hem de içeriği okunabilir bir değer olduğunu kodumuzda belirtmiş olduk.
GET Ne demektir?
Yukarıda da bahsettiğim şekilde “Almak” anlamını taşımaktadır. Eğer bir değişkenin içeriği yazılımımızın başka bir bölümünden erişilip okunabilecek ise bu durumda o özelliği (property) GET özellikli olarak tanımlamamız gerekmektedir.
public string TCIdentity { get; }
Bu şekilde tanımlanana değişkenin içeriği sadece okunabilir. Ancak programımızın başka bir noktasında değiştirilemez. Şimdi biraz daha anlaşılması için bir örnek yapalım ve alt kısmında detaylı açıklayalım bunu isterseniz.
public static class Degiskenler
{
public static string TCIdentity { get; set; }
= string.Empty;
public static bool TCIdentityIsOK
{
get
{
if (!string.IsNullOrWhiteSpace(TCIdentity) && TCIdentity.Length == 11)
{
return true;
}
else
{
return false;
}
}
}
}
class Program
{
static void Main(string[] args)
{
if (Degiskenler.TCIdentityIsOK)
{
Console.WriteLine("TC kimlik numarası geçerli.");
Console.ReadKey();
}
else
{
Console.WriteLine("Üzgünüz, geçersiz TC kimlik numarası!");
Console.ReadKey();
}
}
}
Kodumuzun ilk kısmı “public static class Degiskenler” bir değişkenler sınıfı barındırıyor. Buradaki iki ayrı tipteki değişkeni incelemek ister isek şöyle açıklayabiliriz.
İlk satırda “get ve set” özelliğine sahip, yani okunabilir ve yazılabilir (değiştirilebilir) bir değişken. İkinci satırdaki ise sadece “get” özelliğine sahip, yani sadece okunabilir bir değişken. Ancak buradan ne okuyacağımıza yine biz daha o özelliği yazarken karar veriyoruz.
Aslında buradaki örnek kodun amacı, değişkene atayacağımız değeri başka bir değişken ile bizim verdiğimiz kriterlere uygun mu onu kontrol etmek. Yani tc kimlik numarasına girmiş olduğumuz değer geçerli bir değer mi onu kontrol etmiş oluyoruz. Bu sebep şekilde de kullanıcıdan tekrar girmesini isteyebilir veya doğru ise işlemimize devam edebiliriz.
Kodumuzda;
public static string TCIdentity { get; set; }
TCIdentity değişkeni standart bir string değişken. Hem okunabilir hem de yazılabilir. Ancak;
public static bool TCIdentityIsOK
{
get
{
if (!string.IsNullOrWhiteSpace(TCIdentity) && TCIdentity.Length == 11)
{
return true;
}
else
{
return false;
}
}
}
“TCIdentityIsOK” değişkeni için aynı sını söyleyemeyiz. Çünkü koddan da göreceğiniz gibi sadece okunabilir bir değişken. Peki bu değişken neyi okuyor? Tabii ki bir üstteki TCIdentity değişkenini. Bu değişken eğer boş veya tanımsız ise veya onbir karakter uzunluğunda değil ise bize “false” yani yanlış döndürüyor. Ancak bu kriterlere uygun ise o zaman “true” yani doğru fırlatıyor ve biz de gönül rahatlığı ile işlemimize devam edebiliyoruz.
İşte gördüğünüz gibi get ve set özelliğinin kullanımı kısaca böyle.
GET => Değişken okunmak istendiğinde eğer değişken GET özellikli tanımlandı ise okunacak sonucu,
SET => Değişken içeriği değiştirilmek istendiğinde eğer değişken SET özellikli tanımlandı ise yazılabilmesini sağlıyor.
Eğer sorularınız veya eksik gördüğünüz bir taraf var ise lütfen yorumlardan yazmayı ihmal etmeyin.
Herkese iyi çalışmalar…
Bir koşulun başına ünlem koyduğunuzda, DEĞİLSE eklemiş oluyorsunuz.
Yani diğer bir karşılığı if(string.IsNullOrWhiteSpace(TCIdentity) != true) anlamında.
Eğer sorguladığınız koşul gerçekleşmemiş ise koşul sağlanmış olur.
Kardeşim Get-Set’i anlatmışsın ancak çok yüzeysel, kim bu yazıdan, get nedir ve set nedir den başka ne anlayacak ?
private a;
1.public A {get=>a; set=>a=value;}
2. public A {get=>a private set=>a=value;}
3. public A{get; set;}
bunların farkları nelerdir, 3. örnek public olmasına rağmen güvenliği nasıl sağlıyor, veriyi nereden alıp nereye yazıyor
2. örnek’de set’i private yapacak ise ve sadece aynı sınıf içinde kullanılabiliyorsa yazmanın ne anlamı var vs.
insanlara ezberletmekten ziyade anlatman lazım kardeşim, sen hiçbirşey anlatmamışsın ki.
Öncelikle Merhaba Pasaj Memuru Bey, Herhangi bir televizyon kanalını meşgul ettiğimi düşünmüyorum açıkçası 🙂 Burada bulmak isteyenler için çok farklı konularda örnek kodlar, vs. paylaşıyorum elimden geldiğince. Zira sitenin adının da herhangi bir eğitim iddiası yok. İsteyen istediği bilgiyi alır. Hakeza soru soran arkadaşlar da oluyor. Elimden geldiğince konuyu açıp cevap vermeye çalışıyorum veya o konuyla ilgili ekstra makale yazabiliyorum. Bu cevabı da “sen hiçbirşey anlatmamışsın ki.” diye belirttiğin sözde “eleştiri”ne ithafen yazıyorum. Tekrar belirteyim. Bir eğitim kanalı iddiasıyla yola çıkılmış bir durum yok ortada. Eksik kaldığını düşündüğünüz bilgiler için siz de bir blog açarsınız “engin bilgi” ve “tecrübelerinizden” hep… Read more »
Gayet açık ve anlaşılır olmuş Erkan hocam. Elinize, emeğinize sağlık. Anlamayıp, eleştiren arkadaşlar çalışmaya alfabeden başlayabilirler. Yada şuradan devam edebilirler. İyi çalışmalar dilerim
Teşekkür ederim. Eleştiriye hiçbir itirazım yok. Herkes varsa eksiğim, hatam, vb… bana iletebilir tabii ki. Özrümü de dilerim gerekirse. Gerekirse tekrar araştırır, tekrar ele alırım ilgili konuyu. Ancak arkadaşın yaptığı gibi “sen hiçbirşey anlatmamışsın ki” diye sözde “eleştiri” olmayan bir cümle ile yorum yapmak ve kendisi kimseye bir katkı sağlamazken üst perdeden konuşmak adet oldu maalesef.