C# Tür Dönüşümleri

C# Tür Dönüşümleri, Merhaba arkadaşlar bugünkü yazımızda geçen dersimizde bahsettiğimiz değişkenler konusunun devamı niteliğinde olan C# TÜR DÖNÜŞÜMLERİ hakkında olacak. Hatırlayacağınız üzere değişkenler belirli türleri olan ve bu türde değer tutan nesnelerdi. İşte bazı durumlarda bir değişkenin farklı bir türe dönüştürülmesi gerekebilmektedir. Örneğin yazı (string) olarak almış olduğunuz bir değişkenin sayısal (int) bir değermiş gibi davranmasını isteyebilirsiniz. İşte bu gibi durumlarda Bilinçsiz (Implicit) ve Bilinçli (explicit) tip/tür dönüşümlerine ihtiyaç duyulur. Bu makale sonunda tür dönüşümleri hakkında detaylı bilgiye sahip olacaksınız.

Haydi Başlayalım !

C# Tür Dönüşümü Nedir?

Bazı durumlarda tanımladığımız nesnelerin başka türdenmiş gibi davranmalarını isteriz. Büyük çapta bir proje oluşturduğumuzda değişkenler çok fazla olacaktır ve farklı türden değişkenleri bir arada aynı işi yapmasını isteyebiliriz. Örneğin int türünden bir değişken ile byte türünden bir değişkenin toplanması gibi.

C# Tür Dönüşümü Bilinçsiz Tür Dönüşümü (Implicit) 

Aslında bunu önceki derste görmüştük. Bu derste sadece adını koyuyoruz ve tanımlıyoruz: C#’ta düşük kapasiteli bir değişken, sabit ya da değişken ve sabitlerden oluşan matematiksel ifade daha yüksek kapasiteli bir değişkene atanabilir.Buna bilinçsiz tür dönüşümü denir, bunun için herhangi bir özel kod gerekmez.

class TurDonusumu
{
   static void Main()
   {
      byte a=5;
      short b=10;
      sbyte c=30;
      int d=a+b+c;
      string e="deneme";
      char f='k';
      object g=e+f+d;
      long h=d;
      float i=h;
      double j=i;
      double k=12.5f;
      Console.WriteLine(j+k);
   }
}

ÖNEMLİ
C# tür dönüşümü bilinçsiz tür dönüşümüyle ilgili diğer ilginç bir nokta ise byte, sbyte, short ve ushort türündeki değişkenlerle yapılan matematiksel işlemlerdir. Bu tür durumda oluşan matematiksel ifade intleşir.
Yani aşağıdaki durumda programımız hata verir:

byte a=5, b=10;
short d=2, e=9;
byte f=a+b; //f değişkeni artık bir int türündedir ve int türü byte a dönüşemez!
short g=d+e; //g değişkeni artık bir int türündedir ve int türü short a dönüşemez!
Console.WriteLine(f+g); 

HATIRLATMA
C# tür dönüşümü bilinçsiz tür dönüşümü yapılabilecek değişken listesi. Aşağıda kaynak olarak belirtilen tür herhangi özel bir ifadeye gerek duyulmadan yani bilinçsiz olarak hedef türe dönüştürülebilir.

c-sharp-degiskenler-bilincsiz-implicit-tur-donusumu

C# Tür Dönüşümü Bilinçli Tür Dönüşümü (explicit) 

C# tür dönüştürme de bilinçli tür dönüşümleri genelde C# ın izin vermediği dönüşümleri sağlamak için yapılır.

class TurDonusumu
{
   static void Main()
   {
      int a=5;
      byte b=(byte)a;
      Console.WriteLine(b);
   }
} 

C# Tür Dönüştürme Operatörü

C# tür dönüştürme operatörleri de açılır kapanır parantezler arasına yazılır. Tür dönüşümünün kullanılması aşağıdaki gibidir.

C# Tür Dönüşümleri
C# Tür Dönüşümleri

ÖRNEK
Aşağıdaki örneklerde nasıl bir çıktı olur?

int b = 100; // Sizce ne olur?
byte i = (byte)b;
Console.WriteLine(i);
Console.ReadLine();
int b = 500; // Sizce ne olur?
byte i = (byte)b;
Console.WriteLine(i);
Console.ReadLine();

ÖNEMLİ
-Eğer bilinçli tür dönüşümünde değişken adı kısmında tek bir değişken yoksa, bir ifade varsa parantez içine alınması gerekir.
-Bu şekilde tür dönüşümü değişkenlere uygulanabildiği gibi sabitlere de uygulanabilir:
-Reel türler tam sayı türlere dönüşürken ondalık kısım atılır.

float b = 10.5f;
byte i = (byte)b;
Console.WriteLine(i);

-Bilinçsiz tür dönüşümüyle yalnızca küçük türler büyük türlere dönüşebiliyordu, yani veri kaybı olması imkânsızdı. Hâlbuki bilinçli tür dönüşümünde veri kaybı gerçekleşebilir, eğer dönüşümünü yaptığımız değişkenin tuttuğu değer dönüştürülecek türün kapasitesinden büyükse veri kaybı gerçekleşir. Bu gibi durumlar için C#’ın checked ve unchecked adlı iki anahtar sözcüğü vardır.

C# Tür Dönüşümleri – Checked

Checked
int i=256;
byte b; 
checked //Program hata fırlatır.
{
   b=(byte)i;
}
Console.WriteLine(b);

i, byte’a çevrilirken veri kaybı gerçekleştiği için programımız çalışma zamanında hata verecektir. Ayrıca yeri gelmişken bir konuya değinmek istiyorum. Bu programımızda b değişkeni checked bloklarının içinde tanımlansaydı checked bloklarının dışında bu b değişkenine erişemezdik, çünkü değişkenler yalnızca tanımlandıkları en iç bloğun içinde aktiftirler. Buradaki “en iç” sözüne dikkat etmenizi öneririm.

C# Tür Dönüşümleri – UnChecked

Eğer programımızda veri kaybı olduğunda programın hata vermesini istemediğimiz kısımlar varsa ve bu kısımlar checked bloklarıyla çevrilmişse unchecked bloklarını kullanırız. unchecked, checked’ın etkisini bloklarının içeriği çerçevesinde kırar. Programımızın varsayılan durumu unchecked olduğu için, yalnızca eğer programımızda checked edilmiş bir kısım var ve bu kısım unchecked etmek istediğimiz alanı kapsıyorsa gereklidir, diğer durumlarda gereksizdir.

using System;
class TurDonusumu
{
   static void Main()
   {
      int i=256;
      int a=300;
      byte b, c;
      checked
      {
         b=(byte)i;
         unchecked
         {
            c=(byte)a;
         }
      }
      Console.WriteLine(b);
   }
}

C# TÜR DÖNÜŞÜMLERİ – STRING SINIFI

C# Tür Dönüşümleri – x.ToString() Methodu

Bu metot x değişken ya da sabitini stringe çevirip tutar.

int a=6;
string b=a.ToString();
Console.WriteLine(b);
string c=12.5f.ToString();
Console.WriteLine(c);
string d='k'.ToString();
Console.WriteLine(d);

Bu kod bloku hata vermez. Birleştirmede string ifade olarak işlem görür…

int a = 5;
char m = 'k';
string r = "deneme";
float f = 12.5f;
string b = a + m + r + f;
Console.WriteLine(b); //112deneme12.5

Bu kod bloku hata verir. En az bir string ifade ile birleştirilmelidir.

int a=5;
char m='k';
float f=12.5f;
string b=a+m+f;
Console.WriteLine(b);

C# Tür Dönüşümü – System.Convert sınıfı

System isim alanının altındaki Convert sınıfı içinde tür dönüşümü yapabileceğimiz birçok metot bulunur. Bu metotlarla hemen hemen her türü her türe dönüştürebiliriz. Ancak bunun için değişken türlerinin CTS (Common Type System) karşılıklarını bilmeliyiz. Değişken türleri ve CTS karşılıkları aşağıdaki tabloda listelenmiştir.

HATIRLATMA
Programlama dilleri arasındaki standardizasyonu CTS dediğimiz sistem sağlar. C#.NET ile program yazarken değişken tanımlamak için int ifadesini kullanırız, VB.NET’te ise Integer olarak geçer. Her iki dil farklı olsa dahi CTS dediğimiz sistem sayesinde int ve Integer tanımlamalar MSIL’e çevrilirken CTS sisteminde tanımlanan System.Int32 olarak ara dile çevrilecektir.

Aşağıdaki tabloda değişkenlerin CTS karşılıklarını ve nasıl kullanıldıklarını görebilirsiniz.

C# cts türleri
C# cts tür dönüşümü
string s1, s2;
int sayi1, sayi2;
int Toplam;
Console.Write("Birinci sayıyı girin: ");
s1=Console.ReadLine();
Console.Write("İkinci sayıyı girin: ");
s2=Console.ReadLine();
sayi1=Convert.ToInt32(s1);
sayi2=Convert.ToInt32(s2);
Toplam=sayi1+sayi2;
Console.Write("Toplam= "+Toplam);

ÖZET
-C# Tür dönüştürmeye neden ihtiyaç duyulur?
-C# Bilinçli tür dönüştürme ile C# bilinçsiz tür dönüştürmenin farkı nedir?
-To.String() metodunu işlevi nedir?
-checked – unChecked ifadelerinin kullanım amacı?
-CTS’ye neden ihtiyaç duyulur?

Evet arkadaşlar dersimizin burada sona eriyor. C# tür değiştirme hakkında umarım sizlere faydalı olmuştur !

Dilerseniz bir önceki konumuz olan Değişkenler konusunu tekrar edebilirsiniz.

Bir sonraki konumuz olan C# Operatörleri konusuna devam etmek için tıklayın.

Kodyaz.NET Ana Sayfasına Dön