C# – GET ve SET Metotları

28 Aralık 1992 yılında Erzurum’da doğdum. İlköğretim ve ortaöğretimimi 2000-2012 yıllarında Kocaeli'de; yükseköğretimimi de 2013-2018 yıllarında Sakarya üniversitesi bilgisayar mühendisliği bölümünde tamamladım. Şu an Intertech'te yazılım uzmanı olarak çalışmaktayım.

Bir cevap yazın

Comment as a guest.

  1. Çok güzel, açık ve anlaşılır yazmışsınız, kafamda soru kalmadı saolun

  2. Teşekkür ederim kafamdaki karışıklık sayenizde gitti. Elinize Sağlık.

  3. Hocam örnekte şu kısmı anlamadım rica etsem açıklar mısınız:

    private string AdSoyad;
    public string adsoyad
    {
    get
    {
    return AdSoyad;
    }
    private set
    {
    AdSoyad = value;
    }
    }

    Burada madem set’e özel if else tanımlamayacağız o zaman neden get ve set kullandık?

  4. Serdar Bey, gerçekten güzel bir anlatım. Udemy’den kurslar aldım. Teknik olarak iyi anlatımlar var, ancak sizin anlatımınız oldukça sade ve anlaşılır.
    Bir bilişim öğretmeni olarak sizin örneği öğrencilerime anlatırken kullanmak isterim, sizin için de sakıncası yoksa..

  5. Merhabalar, get set metodlarının birde “get; set;” şeklinde hiç kelebek parantez açmadan kullanım şekli var. Bu konuya değinmemişsiniz. Bu konuda yardımcı olursanız çok sevinrim.

    1. Merhaba,

      Eğer get ve set metotları içerisinde herhangi bir tanımlama yapılmayacaksa, get ve set metotları için süslü parantezlerle metot gövdesi oluşturmak yerine direkt “;” ile bitirilip, bir değişken gibi kullanılabilir.

      public class Kisi
      {
          public string AdSoyad { get; set; }
          public string Meslek { get; set; }
      }
      
      class Program
      {
          private static void Main(string[] args)
          {
              Kisi kisi=new Kisi();
              kisi.AdSoyad = "Serdar YILMAZ";
              kisi.Meslek = "Software Developer";
      
              Console.WriteLine(kisi.AdSoyad + " - " + kisi.Meslek);  // Çıktı: Serdar YILMAZ - Software Developer
          }
      }
      
      1. Merhaba,
        “Eğer get ve set metotları içerisinde herhangi bir tanımlama yapılmayacaksa, get ve set metotları için süslü parantezlerle metot gövdesi oluşturmak yerine direkt “;” ile bitirilip, bir değişken gibi kullanılabilir.”
        gibi kullanmak istediğimde Class program’da örneğin AdSoyad. dediğimde AdSoyad bir metot olarak gelmiyor. İngiliz anahtarı şeklinde bir simgeyle çıkıyor ve program classında değer ataması yapamıyorum. bunun sebebi nedir?

      2. Hocam merhabalar.

        public string AdSoyad;
        public string AdSoyad { get; set; }

        aralarındaki fark nedir anlatır mısınız?

  6. Hocam ilk başta private olarak belirleyip
    private string AdSoyad;
    private ulong TCNo;
    private int OdaNo;
    neden daha sonra public olarak yazdınız
    public string adsoyad ?

    1. Merhaba,
      “private ulong TCNo;” satırı ile tanımlamış olduğumuz TCNo değişkenini public olarak tanımlamış olsaydık; kullanıcı bu değişkene dilediği sayısal değeri atayabilirdi (TCNo=1; veya TCNo=100; gibi). Ancak T.C. Kimlik Numarası 11 haneli olmalıdır. Bu yüzden kullanıcının eksik veya fazla bir değer girmesini önlemek amacıyla doğrudan TCNo değişkenine atama yapmasına izin vermiyoruz(TCNo değişkenini private olarak tanımlamamızın nedeni bu). Bunun yerine;

      public ulong tcno
      {
          get
          {
              return TCNo;
          }
          set
          {
              if (value.ToString().Length == 11)
                  TCNo = value;
              else
                  Console.WriteLine("HATA! TC Kimlik Numarası 11 Haneli Olmalıdır.");
          }
      }
      

      yukarıdaki kod blogu ile tcno adında bir özellik tanımlıyoruz. Bu özellik ile kullanıcının girmiş olduğu değerin 11 haneli olup/olmadığını kontrol ediyoruz ve eğer 11 haneli ise girmiş olduğu değeri TCNo değişkenine atıyoruz. Yani amacımız değişkenlere atanmak istenen değerleri kontrol etmek.

      private string AdSoyad;” satırı ile tanımlamış olduğumuz AdSoyad değişkenini public yapıp, adsoyad özelliğini tanımlamayada bilirdik. Sonuçta adsoyad özelliğinde herhangi bir kontrol yapılmamış. Kullanıcının girdiği değer direkt AdSoyad değişkenine aktarılmış. Ancak amacımız Get ve Set metotlarını öğrenmek olduğu için AdSoyad değişkenine de atamayı Get/Set metotları üzerinden yaptık. Ama siz isterseniz adsoyad özelliğinde; kullanıcının AdSoyad değişkenine sayısal bir değer girmesini önleyecek şekilde bir kontrol mekanizması kurabilirsiniz. Sonuçta AdSoyad değişkeni string olduğu için sayısal değerler de atanabilir ancak biz o değişkenin isim-soyisim bilgisini tutmasını istediğimiz için ve isim-soyisim bilgisinde de sayı olmaması gerektiği için adsoyad özelliğinde bunun kontrolünü yapabiliriz.

  7. Serdar bey oldukça faydalı bir anlatım olmuş teşekkürler emeğiniz için

  8. benim sorum şu olacak . c# veya java da Math.exp(90) yazdıgımızda sayı sonusz basamaklı cıkıyor. 4,1233123E+5 gibi bu sayıyı double nasıl yaparız. nasıl yuvarlarız ?teşekkurler

    1. Merhaba,

      Math sınıfı içerisindeki Exp() metodu zaten sonucu Double tipinde döndürmektedir.

      Exp() metodunun Math sınıfı içerisindeki bildirimi;
      public static double Exp(double d)

      Math.Exp(90) kodu geriye “1,22040329431784E+39” şeklinde double tipinde bir sayı döndürmektedir. Bu sayı ise sonsuz basamaklı değildir. Sadece daha okunabilir olması için farklı bir notasyon da gösterilmiştir. Sayının sonunda bulunan “E+39” ifadesi “10^39” anlamına gelmektedir. Ekrana 39 tane sıfır yazmak yerine “E+39” yazmak sonucu daha anlaşılır kılacaktır. Elde ettiğiniz bu sonuç üzerinde dilediğiniz aritmetik işlemi yapabilirsiniz.

      Eğer “1,22040329431784E+39” yerine, bu ifadenin açılımını görüntülemek istiyorsanız aşağıdaki kod satırı işinizi görecektir.

      double Sayi = Math.Exp(90);
      Console.WriteLine("Sonuç 1: " + Sayi);
      Console.WriteLine("Sonuç 2: " + Sayi.ToString("0." + new string('#', 339)));

      Ekran Çıktısı:
      Sonuç:1,22040329431784E+39
      Sonuç:1220403294317840000000000000000000000000

      1. serdar bee öncelikle teşekkür ederim. ben en çok sunun sıkıntısını yaşadım math.Exxp(90) +1 işleminin sonucunu yapamadım . yanı Math.Exp ile toplama cıkarma yapılamıyor. ama dedıgınız yontemı denıyecegım. 339 yazmıssınız #,339 onun anlamı nedir

        1. Double türünün hassasiyeti 16 bit dir yani sıfır içermeyen basamak sayısı maksimum 16 olabilir (Bknz: double (C# Reference)). Toplama ve çıkarma işlemleri ile alakalı sorunuzun cevabı burada yatmaktadır. Math.Exp(90) işleminin sonucu 1,22040329431784E+39 yani 1220403294317840000000000000000000000000 şeklindedir.

          Math.Exp(90) + 1 = (1220403294317840000000000000000000000000 + 1) işleminin sonucu 1220403294317840000000000000000000000001 olması gerekir ancak double’ın sıfır içermeyen basamak sayısı maksimum 16 olduğu için çıkan sonucun sadece “122040329431784” kadarını görebilmekteyiz. Geriye kalan basamakları 10’un kuvvetleri olacak şekilde ifade etmektedir.

          Double türünün yaklaşık aralığı ±5.0 × 10^(-324)±1.7 × 10^(308). Yani maksimum 339 basamaklı bir sayıyı tutabilmektedir. 339 yazmamızın nedeni bundan kaynaklanmaktadır. Özetle Double’ın sıfırdan farklı 16 basamak tuttuğunu gerisini 10’un kuvveti şeklinde ifade ettiğini bildiğimiz için sayının açılımını yazarken ilk 16 basamağını alıp, geriye kalan basamakları 0 olacak şekilde ekrana basıyoruz.

  9. Konu için teşekkürler, öğrenmiş oldum. Oldukça kullanışlı bi yapı.
    Kullanıcının girdiği veri kontrollerini ben farklı metotlarda yapıyordum zaten ama sanırm son bir kontrolu de bu sekilde eklesem iyi olur…

Sliding Sidebar