Tip Dönüşümü Örneği

                                                           Tip Dönüşümü Örneği     

Modern programlamada birçok kez değişkenlerde tür dönüşümüne ihtiyaç duyulur. Örneğin string türündeki sayılarla ("5" veya "2" gibi) matematiksel işlem yapmamız gerektiğinde tür dönüşümü yapmamız gerekir. Aslında bahsettiğimiz tam olarak tür dönüşümü değildir, sadece bir değişkenin değişik türdeki hâlinin başka bir değişkene atanmasıdır. Tür dönüşümleri bilinçli tür dönüşümü ve bilinçsiz tür dönüşümü olmak üzere ikiye ayrılır.

Bilinçsiz tür dönüşümü

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.

 using System;
 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);
 	}
 }

Bilinçsiz tür dönüşümüyle ilgili ilginç bir durum söz konusudur. char türünü kendisinden daha kapasiteli bir sayısal türe bilinçsiz olarak dönüştürebiliriz. Bu durumda ilgili karakterin Unicode karşılığı ilgili sayısal değişkene atanacaktır.

 using System;
 class TurDonusumu
 {
 	static void Main()
 	{
 		char a='h';
 		int b=a;
 		Console.WriteLine(b);
 	}
 }

Bilinçsiz tür dönüşümüyle ilgili diğer ilginç bir nokta ise byte, sbyteshort 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:

 using System;
 class TurDonusumu
 {
 	static void Main()
 	{
 		byte a=5, b=10;
 		short d=2, e=9;
 		byte f=a+b;
 		short g=d+e;
 		Console.WriteLine(f+g);
 	}
 }

Bilinçli tür dönüşümü

Bilinçli tür dönüşümü 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 sağlanabilse de aslında bu gereksizdir, çünkü aynı şeyi bilinçsiz tür dönüşümüyle de yapabilirdik

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

Eğer 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:

 using System;
 class TurDonusumu
 {
 	static void Main()
 	{
 		byte b=(byte)12.5f;
 		Console.WriteLine(b);
 	}
 }

Reel türler tam sayı türlere dönüşürken ondalık kısım atılır.

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ı imkansızdı. Halbuki 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.

string türüyle ilgili dönüşümler

x.ToString()

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

using System;
 class TurDonusumu
 {
 	static void Main()
 	{
 		int a=6;
 		string b=a.ToString(); 
 		Console.WriteLine(b);
 	}
 }

 

System.Convert sınıfı ile tür dönüşümü

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 karşılıklarını bilmeliyiz. Değişken türleri ve CTS karşılıkları  listelenmiştir.

bool Boolean

byte Byte

sbyte Sbyte

short Int16

ushort UInt16

int Int32

uint UInt32

long Int64

ulong UInt64

float Single

double Double

decimal Decimal

char Char

metotları şunlardır

  • Convert.ToByte(x)
  • Convert.ToSbyte(x)
  • Convert.ToInt16(x)
  • Convert.ToUInt16(x)
  • Convert.ToInt32(x)
  • Convert.ToUInt32(x)
  • Convert.ToInt64(x)
  • Convert.ToUInt64(x)
  • Convert.ToSingle(x)
  • Convert.ToDouble(x)
  • Convert.ToDecimal(x)
  • Convert.ToChar(x)

Bu metotlar x'i söz konusu türe dönüştürüp o türde tutarlar. x bir değişken, sabit ya da ifade olabilir. x, ifade olduğu zaman önce bu ifade mevcut türe göre işlenir, sonra tür dönüşümü gerçekleşir

 using System;
 class TurDonusumu
 {
 	static void Main()
 	{
 		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);
	}
 }

 

 

Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...