Serdar YILMAZ
Bizimkisi Bir “Bug” Hikayesi...
Serdivan/Sakarya
Serdar Yılmaz C# – GET ve SET Metotları

C# – GET ve SET Metotları

dotnet

Set ve Get metotlarını birer kontrol mekanizması olarak düşünebiliriz. Olası problemleri önlemek, işlemleri güvenilir ve kontrollü bir şekilde gerçekleştirmek için Set ve Get metotlarını kullanırız.

Basit bir senaryo üzerinden konumuzu açıklamaya devam edelim. Otel otomasyonu için müşteri bilgilerini tutan bir sınıf tasarladığımızı düşünelim. Müşterinin ad-soyad, TC kimlik numarası ve oda numarası bilgilerini tutmak istiyorsak aşağıdaki gibi bir tasarım yapabiliriz.

Musteri sınıfının üyeleri public olarak bildirildiği için bu üyelere doğrudan erişilip değerler atanabilir. İşte bu noktada kontrolü elimize almamız lazım aksi taktirde TC kimlik numarası eksik/fazla girilebilir veya 120 odalı bir otelde oda numarası negatif veya 120’den büyük girilebilir. Amacımız dikkatsizlik sonucu yaşanabilecek olası sorunların önüne geçmek. Bu yüzden üyelere doğrudan erişimi engelleyip (Private), Get ve Set metotları ile kontrollü bir erişim sağlayacağız.

Sınıfın AdSoyad, TCNo, OdaNo üyelerini diğer sınıfların erişimine kapattık (private) ve bu üyelere olan erişimi adsoyad, tcno, odano özellikleri üzerinden kontrollü bir şekilde sağladık. (else bloklarında exception fırlatabilirdik ancak istisnai durum yönetimini anlatmadığımız için şimdilik es geçiyoruz.)

GET Metodu

Bir özelliğin değeri okunmak istenildiğinde o özelliğe ait GET metodu çalışır.

Console.WriteLine(m1.adsoyad);

m1 nesnesinin içerisindeki adsoyad özelliğinin Get metodu çalışacaktır.

SET Metodu

Bir özelliğe atama yapılmak istenildiğinde o özelliğe ait SET metodu çalışır. Atanan değere SET metodu içerisinde value anahtar sözcüğü ile erişilir. value anahtar sözcüğünün önceden belirlenmiş herhangi bir türü yoktur. Özelliğe atanacak değer hangi türden ise value da o türden olur.

m1.adsoyad=”Serdar Yılmaz”;

m1 nesnesinin içerisindeki adsoyad özelliğinin SET metodu çalışacaktır ve value ifadesi “Serdar Yılmaz” değerini alacaktır.

Bir özelliğin sadece GET metodunu tanımlayarak özelliği sadece okunabilir hale getirebiliriz.

Erişim Belirleyicisi Kullanımı

GET ve SET metotlarında erişim belirleyicilerini kullanarak erişimin sınırlarını belirtebiliriz.

Yukarıdaki örneğimizde SET metodu private olarak bildirildi. Bu yüzden diğer sınıflardan adsoyad özelliğinin değeri okunabilir ancak herhangi bir atama yapılamaz (set metoduna sadece sınıfın içinden erişilebilir). Eğer SET metodunu private olarak bildirmeseydik; adsoyad özelliği public olduğu için SET metodu da otomatikmen public olacaktı.

GET ve SET metotları için herhangi bir erişim belirteci bildirilmezse, varsayılan olarak özelliğin erişim belirtecini alırlar.

Serdar YILMAZ


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

9 Yorum

  1. adem
    20 Mayıs 2018 de 11:43 · Cevapla

    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

    • Serdar Yılmaz
      24 Mayıs 2018 de 16:53 · Cevapla

      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

      • adem
        25 Mayıs 2018 de 10:36 · Cevapla

        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

        • Serdar Yılmaz
          25 Mayıs 2018 de 23:30 · Cevapla

          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.

  2. Nurettin
    12 Mayıs 2018 de 22:40 · Cevapla

    olması lazım değilmiydi

  3. Nurettin
    12 Mayıs 2018 de 22:36 · Cevapla

    11 15 This.AdSoyad 23 28 This.TCNo 37 42 OdaNo satırlarında

    • Serdar Yılmaz
      14 Mayıs 2018 de 00:35 · Cevapla

      Merhaba,

      Bu uygulama için this anahtar sözcüğünü kullanma mecburiyetiniz bulunmamaktadır. This anahtar sözcüğünün kullanımı hakkında bilgin edinmek için aşağıdaki içeriğe göz gezdirebilirsiniz.

      http://www.srdrylmz.com/c-this-anahtar-sozcugu/

  4. umut
    20 Kasım 2017 de 01:55 · Cevapla

    abi adamsın

  5. murat
    16 Ekim 2017 de 13:02 · Cevapla

    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…

Bir Yorum Yapın