Örtük ve Açık Dönüşümler
Uyumlu türler arasında güvenli şekilde dönüşüm yapın.
Örtük ve Açık Dönüşümler, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Türler Arasında Dönüştürme
C#, bir sayısal türü başka bir sayısal türe dönüştürebilir. Bazı dönüştürmeler otomatik olarak gerçekleşir (örtük), diğerleri ise açık bir tür dönüştürmesi gerektirir.
using System;
class Program
{
static void Main()
{
int i = 10;
double d = i; // implicit
int back = (int)d; // explicit
Console.WriteLine(d + ", " + back);
}
}Örtük (Genişleten) Dönüştürmeler
Veri kaybı mümkün olmadığında örtük dönüştürmeye izin verilir; örneğin int türünden long türüne veya int türünden double türüne dönüştürmede olduğu gibi. Tür dönüştürmesi yazmanız gerekmez.
using System;
class Program
{
static void Main()
{
int i = 42;
long l = i; // widening, safe
double d = i; // widening, safe
Console.WriteLine(l + ", " + d);
}
}Genişleten Dönüştürme Neden Güvenlidir
Hedef tür, kaynak türün tüm değerlerini gösterebilir; bu nedenle derleyici dönüştürmeye sessizce izin verir.
using System;
class Program
{
static void Main()
{
byte b = 200;
int i = b; // byte fits in int
Console.WriteLine("byte " + b + " -> int " + i);
}
}Açık (Daraltan) Dönüştürmeler
Veri kaybı yaşanabileceğinde açık dönüştürme (tür dönüştürmesi) gerekir; örneğin double türünden int türüne dönüştürmede olduğu gibi. (int)value yazarsınız.
using System;
class Program
{
static void Main()
{
double d = 9.78;
int i = (int)d; // truncates toward zero -> 9
Console.WriteLine(i);
}
}Tür Dönüştürme Keser, Yuvarlamaz
Ondalıklı bir değeri tamsayıya dönüştürmek kesirli kısmı atar; yuvarlama yapmaz. Yuvarlama istiyorsanız önce Math.Round kullanın.
using System;
class Program
{
static void Main()
{
double d = 7.99;
Console.WriteLine("Cast: " + (int)d);
Console.WriteLine("Round: " + (int)Math.Round(d));
}
}Daraltmada Taşma
Bir değer hedef türe sığmazsa sıradan bir tür dönüştürmesi sessizce başa sarabilir. Bunun yerine taşma oluştuğunda hata vermesi için ifadeyi checked içine alın.
using System;
class Program
{
static void Main()
{
int big = 300;
byte wrapped = (byte)big; // 300 wraps to 44
Console.WriteLine("Wrapped: " + wrapped);
try
{
byte safe = checked((byte)big);
Console.WriteLine(safe);
}
catch (OverflowException)
{
Console.WriteLine("checked caught overflow");
}
}
}Kesinlik Kaybı
Çok büyük long değerlerini float türüne dönüştürmek gibi bazı genişleten dönüştürmelerde de kesinlik kaybı yaşanabilir; yine de bu dönüştürmeler örtüktür.
using System;
class Program
{
static void Main()
{
long big = 9007199254740993L;
double approx = big; // implicit, may lose precision
Console.WriteLine("long: " + big);
Console.WriteLine("double: " + approx.ToString("F0"));
}
}Karakter ve Sayısal Dönüştürmeler
Bir char örtük olarak sayısal koduna dönüştürülür; bir sayıyı da açık bir tür dönüştürmesiyle char türüne çevirebilirsiniz.
using System;
class Program
{
static void Main()
{
char c = 'A';
int code = c; // implicit -> 65
char next = (char)(code + 1); // explicit -> B
Console.WriteLine(code + " -> " + next);
}
}İfadelerde Dönüştürmeler
Karışık aritmetik işlemlerde, işlemden önce küçük türler otomatik olarak daha büyük türe yükseltilir.
using System;
class Program
{
static void Main()
{
int a = 7;
double b = 2;
double result = a / b; // a promoted to double -> 3.5
Console.WriteLine(result);
}
}Tamsayı Bölmesi Tuzakları
Her iki işlenen de tamsayıysa bölme işlemi tamsayı bölmesi olur. Kesirli bir sonuç elde etmek için önce işlenenlerden birini double türüne dönüştürün.
using System;
class Program
{
static void Main()
{
int a = 7, b = 2;
Console.WriteLine("int / int: " + (a / b));
Console.WriteLine("with cast: " + ((double)a / b));
}
}Hepsini Bir Araya Getirme
Güvenli olduğunda örtük dönüştürmeleri tercih edin; daraltma gereken durumlarda açık tür dönüştürmeleri kullanın ve kesilme, taşma ile tamsayı bölmesine dikkat edin.
using System;
class Program
{
static void Main()
{
int total = 17, count = 5;
double average = (double)total / count; // cast to avoid integer division
int rounded = (int)Math.Round(average);
Console.WriteLine("avg=" + average + ", rounded=" + rounded);
}
}Hızlı Kontrol
Dönüştürmeler konusundaki anlayışınızı sınayın.
Özet
Örtük (genişleten) dönüştürmeler, veri kaybı olmadığında otomatik olarak gerçekleşir (int türünden uzun tamsayı türüne, int türünden çift duyarlıklı sayı türüne). Açık (daraltan) dönüştürmeler (int)x gibi bir tür dönüştürmesi gerektirir ve kesilmeye veya taşmaya neden olabilir. Taşmaları yakalamak için checked kullanın; tamsayı bölmesinden kaçınmak için bir değeri çift duyarlıklı sayıya dönüştürün.
using System;
class Program
{
static void Main()
{
double d = 3.9;
int i = (int)d; // explicit, truncates to 3
long l = i; // implicit widening
Console.WriteLine(i + ", " + l);
}
}Sıkça Sorulan Sorular
“Örtük ve Açık Dönüşümler” dersi ücretsiz mi?
Evet — “Örtük ve Açık Dönüşümler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Örtük ve Açık Dönüşümler” dersinde ne öğreneceğim?
Uyumlu türler arasında güvenli şekilde dönüşüm yapın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Örtük ve Açık Dönüşümler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Değer Türleri ve Başvuru Türleri
- Boxing ve Unboxing
- Örtük ve Açık Dönüşümler
- Convert Sınıfı ve Ayrıştırma