String.Empty , “” ve Null Arasındaki Fark

İnternette araştırdığım bir kodda, bir string değişkenine şu şekilde atama yapıldığını gördüm,

string reverse = String.Empty;

daha önce karşılaşmadığım için internetten ne olduğuna baktım. Şimdi de sizlere bu edindiğim bilgileri aktarmak istiyorum.

String.Empty veya “” kullandığımız zaman aynı boş string değerini elde etmemize rağmen aralarında bir fark vardır.

  • String.Empty ile aslında bellekte herhangi bir nesne yaratmayıp sadece String altındaki Empty alanına (field) a referans vermektedir.
  • Sting a = “”; ile ise boş değerli (empty) yeni bir string nesnesi bellekte “yaratılmış” olmaktadır.

String a = null; da yine String.Empty gibi uzunluğu “sıfır” olan bir stringi represent (temsil) etmekte olup kendisine “null” değeri atanmış olup, henüz kendisinin refere ettiği bir string örneklemi bulunmadığını belirtmektedir. Not: Hatta .NET Framework bu iki durumu aynı method ile geliştiricilerin kontrol edebilmesi için String.IsNullOrEmpty methodunu barındırmaktadır.

Kaynak: Onur Güzel’in yanıtından alıntılanıp düzenlenmiştir. https://social.msdn.microsoft.com/Forums/tr-TR/28d5f5a0-bb39-4bc1-aace-6f18976964fa/stringempty-quotquot-null-arasndaki-fark-nedir?forum=csharptr

C# – Yapıcı (Constructor) ve Get-Set (Property) kullanımı

YAPICILAR

  • Yapıcılar bir sınıftan new anahtar sözcüğüyle yeni bir nesne oluşturulduğu anda çalışan metottur. 
  • Yapıcı metot sınıf ismiyle aynı olmak zorundadır.
  • Geriye değer döndürmez. Fakat değer döndürmeyen metotlarda kullanılan void  yapıcı metotlarda kullanılmaz.
  • Yapıcı metotlar parametre alabilirler, aşırı yüklü olabilirler.
  • Kaynak: https://www.yazilimkodlama.com/programlama/c-siniflar-yapici-metot-constructor-kullanimi/

GET – SET KULLANIMI

  • Bir Class içerisinde bulunan bazı alanlara her zaman ulaşmak gerekmez. Çünkü bir nesneyi sürekli ulaşılabilir hale getirmek bilinçsiz kullanım, veri kaybı ve güvenliği gibi sorunları ortaya çıkartır. Zaten nesneleri tanımlarken varsayılan değer olarak “Private” erişim belirleyicisi olarak tanımlanması da bu tip gerekçelerden kaynaklanır. “Public” erişim belirleyicisi ise tamamen açık hale getirir. İşte tam bu noktada nesnelerimizin erişimini yönetmek için “Property” kavramı devreye girer. “Property” yani Özellik metotları nesnelerimiz üzerinde kontrollü kullanım sağlar.
  • Bir sınıf içerisinden farklı bir sınıf içerisindeki nesneye ulaşmak istiyorsak özellik (get -set) metotlarını kullanmalıyız.
  • Özellik metotları Get ve Set anahtar kelimesinden oluşan iki kod bloğundan oluşurlar.
  • Get metodu veri okunduğu zaman, Set metodu ise veri yazıldığı zaman (yani değer ataması yapıldığı zaman) yürütülür.
  • Kaynak: http://alkanfatih.com/c-property-ozellik-kullanimi-get-ve-set-nedir-nasil-kullanilir/

PUBLİC VE STATİC

  • Public olarak tanımlanan öğeye kod bloğunun içinden ve dışından erişilebilir, yani her yerden ulaşılabilir denilebilir.
  • Statik tanımlaması yapıldığında ise bu sınıf, herhangi bir nesne oluşturmadan; sadece adıyla çağırılıp erişim sağlanabilir.

Kodumuz

  • ogrenci sınıfının içerisinde bulunan Ad, Yas, Burc, Renk, Sayi isimli metotlardaki get ve set metotlarının sırası fark etmez. Yani bu kodda önce get metodu sonra set metodu yazılmış ve set ile değeri aldıktan sonra get ile geri gönderiyoruz gibi değil de bu ikilinin, bir metod içinde birbirini tamamladığını düşünmeliyiz. (sanırım?) (farklı sıralarda yazıp denedim ve aynı çıktıyı aldığım için bu kanıya vardım)
  • Değişkenleri yapıcının içerisinde tanımlayamayız. Sınıfın içerisinde, yapıcının dışında tanımladığımız değişkenleri, yapıcının içerisinde korumaya alırız. Bu sayede değişkenlerin değerlerine kolayca ulaşılıp değişiklik yapılaması engellenmiş olur. (6, 7, 8, 9 ve 10. satırlarda değişken tanımlama yapılır) (15, 16, 17, 18 ve 19. satırlarda değişkenler yapıcı içerisine konularak korunur)
  • Yapıcıyı ve içerisine get-set’leri koyacağımız metotları public şekilde tanımlıyoruz. (13, 22, 27, 33, 39 ve 45. satırlar)
  • 58, 59, 60, 61 ve 62. satırlarda nesneismi.değişkeninadı şeklinde değil de nesneismi.değişkeninmetodununadı şeklinde bir çağrılma yapılmalı. Örneğin, ad bir değişkendir ve değeri Rumeysa dır. ad değişkenini alan ve geri gönderen (içerisinde değişkene ait, sadece get-set metotlarının bulunduğu) metodun ismi ise Ad dır. Bu nedenle biz ad değişkenini Main metodu içerisinde çağıracağımız zaman, ad değişkeninin bulunduğu ogrenci sınıfından oluşturulan ogrnesne isimli nesne nokta değişkenin metodunun adı şeklinde yazarız.

Kodun Çıktısı

Hatalar

  • Değişkenler yapıcı içerisinde tanımlanmamalıydı.
  • Yapıcı ve içerisine get-set’leri koyacağımız metotlar static değil, public şekilde tanımlanmalıydı.
  • Başka bir sınıf içerisindeki değişkeni, Main metodu içerisinde nesne üzerinden çağıracağımız zaman; nesne adından sonra direkt olarak değişkenin adı değil, değişkenin bulunduğu metodun adı yazılmalıdır. Bu elbette ki her durum için geçerli değildir. Burada metodun adını kullanmamızın sebebi, bu metodun içerisinde sadece bu değişkenle ilgili get ve set metotlarının kullanılması, yani bu değişkenin döndürülmesi ile ilgilidir.

C# – Alan ve çevre hesabı yapabilen metodları içeren sınıf yazma ve main altında bu sınıfın objelerini oluşturma

Normalde, alan ve çevre hesabı yapabilen metodları, main metodu ile aynı sınıf içine yazabilirdik fakat bu kodda başka bir sınıf altında yazılan kodun, main içerisinde objesini nasıl oluşturup alan ve çevre hesabını yaptırdığımızı göreceğiz. Aynı kemik kod üzerinde 2 farklı örnek bulunuyor. Bu kodlar birbiriyle bağımsızdır. Birisi dik üçgenler üzerine, diğeri dikdörtgen üzerine yazılmıştır.

Kodumuz

1-Dik Üçgen Sınıfı

2-Dikdörtgen Sınıfı

Kodun Çıktısı

1-Dik Üçgen Sınıfının Çıktısı

2-Dikdörtgen Sınıfının Çıktısı

2 haftadır ara ara düşünüp kavrayamadığım, yazamadığım bir koddu. Ağlayacağım.

20 Ekim 2019. * R

C# – Elemanları ekrandan alınan diziyi tersten yazdırma

Bu kodun tüm kısımlarına hakim değilim fakat zamanla öğreneceğimi düşünüyorum. Buraya dönüp kodu tekrar inceleyebilmek ve unutmamak için koyuyorum.

Kodumuz

Kodun Çıktısı

Hatalar

5, 11, 21 ve 23. satırdaki hataların doğru yazımları yorum satırında belirtilmiştir.

C – Type cast kullanarak işlem sonucunu bir double değişkene atama

Kodumuz

Kodun Çıktısı

Hatalar

  • 4. satırda c değişkeni integer olarak tanımlandı fakat double değişken olarak tanımlanmalıydı. 10. satırda double yazmak yetmez. double yaptığımız bir sonucu integer değişkene atayamayız.
  • 10. satırda işlemi parantez içine aldık ve 6/5 işleminden sonuç 1 kalan da 1 oldu. fakat bize kalan kısmını göstermediği için cevap direkt 1 oluyor. 1 sayısını double yapmamız da bu durumda bir şey ifade etmiyor.
  • 12. satırda double yapmak istediğimiz işlem sonucunu %d ile yazdırmaya çalışmışız fakat double türündeki değişkenler %f ile yazdırılır.
pek çok mantık hatası olan bu kodun çıktısı bu şekilde
diğer hataları düzeltip sadece işlemi paranteze alan hatayı bıraktım
bu şekilde işlemi yapmaya kalkarsak yani işlemi paranteze alıp yaparsak 6/5 işleminden sonuç 1 kalan da 1 olur fakat bize kalan kısmını göstermediği için cevap direkt 1 oldu. 1 sayısını double yapmamız da bu durumda bir şey ifade etmedi.

C# – Girilen iki sayıdan büyüğünü belirleyip tek mi çift mi olduğunu yazdırma

Kodumuz

Kodumuz yukarıdaki gibi yazılıyor. String veri tipindeki değişkenleri integer veri tipine çevirmeyi unutmayalım.

Kodun Çıktıları

Kodun çıktıları bu şekilde. Görüldüğü gibi negatif sayılar için de hesaplama yapılabiliyor.

Hatalar

Burada Main fonksiyonun yanına (string[] args) yazmadığım için string türünde tanımladığım değişken ile ilgili işlemler içeren tüm satırlar hatalı bulundu.

Üstteki hatayı düzelttim fakat using System isim uzayından sonra süslü parantez kullandığım için kodumuz 2. ve 33. satırlarda hata verdi.

  • using Syastem isim uzayından sonra süslü parantez kullanılmaz.

13. ve 14. satırlarda altı çizili i1 ve i2 yerine Convert yazmam gerekirdi. String türünde olan değişkenleri integer türüne çevirmek için de .ToInt yerine .ToInt32 şeklinde yazmam gerekirdi.

C# – Büyük küçük harf duyarlılığını kaldırma

Bu kodda ekrandan aldığımız verinin büyük-küçük harf duyarlılığını ortadan kaldırmak için

degisken = degisken.ToLower();

kodunu kullanacağız.

Kodumuz

kodumuz bu şekilde yazılıyor

12. satırdaki kod bu duyarlılığı kaldırmayı sağlıyor. Bu satırda eşittir sembolünden sonra isim. yazmayı ve ToLower’dan sonra da () koymayı unutmayalım.

Kodun Çıktıları

Kodun çıktılarından da görüldüğü gibi harfler doğru girildikten sonra büyük veya küçük harf ile ilgili bir sıktı oluşmuyor.

Bunlar da istenilenin dışında bir veri girildiğinde alınan çıktılar.