C# – Typecast (Bilinçli Dönüşüm – Explicit Type Conversion) kullanımı

Basit bir tasarruf uygulaması kodu üzerinden typecast (bilinçli dönüşüm) kullanımını inceleyeceğiz. Kodun detaylarında saatte 2 tl elektrik yakan bir ampul ile totalde %20 tasarruf sağlayan bir ampulün girilen kullanma süresi gibi detaylar ile birlikte faturaya yansıyacak fiyatlarını yazdıran bir kod yazmamız isteniyor.

Kodumuz

  • 16. satırda yapılan typecast (bilinçli dönüşüm) işlemi (float) 80 / 100 şeklinde olmalı.
  • 17. satırda Console.WriteLine() metodu ile ekrana yazdıracağımız şeyleri yazdırırken dikkat etmemiz gerekenler vardır. Eğer bir metin yazdırmak istiyorsak bunları parantezde tırnak işaretleri içerisinde yazarız. Eğer ki yazdırmak istediğimiz şeyler kodun içinde tanımlamış olduğumuz değişkenler ise, bunları parantezde direkt olarak değişkenin ismini yazmak suretiyle yazdırabiliriz fakat eğer hem metin hem de değişken yazdırmak istiyorsak bunları + (artı) işareti ile aynı anda yazdırabiliriz. C dilindeki printf fonksiyonunun parantez içindeki gibi virgül ile ayırmak söz konusu değildir.

Kodun Çıktısı

Hatalar

  • Bu hatalı kodda, 16. satırdaki bölme işlemi parantez içinde yapılmış ve önünde de typecast kullanılmak istenmiş fakat bölme işleminin sonucu 0.8 olduğu için işlem yapıldıktan sonra float türüne dönüştürmek bir şey ifade etmeyecektir. Çünkü işlemin sonucu olarak sadece virgülden/noktadan öncesini alacaktır ve 0.8’nın 0’ını alarak floata dönüştürdükten sonra 0.0 elde edilmiş olur.
Hatalı ilk kodumuzun çıktısı budur.
  • Bu hatalı kodun çıktısında görüldüğü gibi sonuç 0 olur çünkü 50 * 0.0 = 0
  • Buradaki hatalı kodda ise, 16. satırda float ifadesi paranteze alınmalıdır. Aksi taktirde bu ifade tanımlanamayacaktır.
Hatalı ikinci kodumuzun çıktısı da bu şekilde.

Type Conversion (Typecast and Methods)

Type Conversion (tür dönüşümü)’ın bir alt formu olan Typecast konusu anladığım kadarıyla; basit, temel ve bir o kadar da önemli bir konu. Kodlamaya başladığım ilk zamanlarda öğrenmiş olmama rağmen ve hatta şu kısa süreli blog serüvenimde bile bununla ilgili bir örnek yapmış olmama rağmen, yaptığım matematik işlemlerinde bu konuyla ilgili detaylar yüzünden sonuca ulaşamadığımı fark ettiğim bir konu olduğu için tür dönüşümleri için ayrı bir başlık açmak istedim.

Veri türeleri arası dönüşüm, bir değişkenin değişik türdeki hâlinin başka bir değişkene atanmasıdır. Typecast (type casting) de denir. İki formu vardır.

Typecast

  1. Bilinçsiz Dönüşüm (Implicit Type Conversion): Düşük kapasiteli bir değişken, sabit ya da değişken ve sabitlerden oluşan matematiksel ifadenin daha yüksek kapasiteli bir değişkene atanması. Özel bir kod gerekmez
  2. Bilinçli Dönüşüm (Explicit Type Conversion): Genellikle derleyicinin izin vermediği durumlarda kullanılır. Bilinçli tür dönüşümüyle küçük türün büyük türe dönüştürülmesi gereksizdir, bilinçsiz tür dönüşümü bu işi yapar. Dönüşümü yapılan değişkenin tuttuğu değer, dönüştürülecek türün kapasitesinden büyükse veri kaybı gerçekleşebilir.

Bilinçsiz Dönüşüm (Implicit Type Conversion)

Bilinçli Dönüşüm (Explicit Type Conversion)

object Türüyle İlgili Kurallar

object türündeki bir değişkene başka herhangi bir türdeki değişken ya da sabit (string dışında) + işaretiyle eklenemez.

object türündeki bir değişkene herhangi bir türdeki değişken ya da sabit atanabilir (bilinçsiz tür dönüşümü). object türündeki bir değişkeni başka bir türe çevirmek için tür dönüştürme işlemi kullanılır. Dönüştürülen türlerin uyumlu olması gerekir.

Aynı satırda çifte dönüşüm yapılamaz.

string Türüyle İlgili Dönüşümler

x.ToString(): x değişken ya da sabitini stringe çevirip tutar.

string türüyle ilgili bilinmesi gerekenler:

Methods (System.Convert sınıfı)

Tür dönüşümü için metotlar System isim uzayında Convert sınıfındadır. Hemen hemen her tür her türe dönüştürülebilir. Değişken türlerinin CTS (Common Type System) karşılıkları bilinmelidir.

~Aritmetik Dönüşüm Hiyerarşisi

Kaynaklar: