Data Type Casting In C#
Bu eğiticide, bir veri türünün başka bir veri türüne nasıl dönüştürülebileceğini ayrıntılı olarak tartışacağız. C #, derleme sırasında statik türdür, yani bir değişkenin bildiriminden sonra başka herhangi bir veri türünün değerlerini depolamak için kullanılamaz.
Ancak, bu tür bir değişken türüne dönüştürülerek bu sorunun üstesinden gelinebilir.
Bir dize değerini tam sayıya dönüştürmeyi deneyelim.
int a;
a = "rastgele bir dizi";
Bunu derlersek, “‘string’ türü örtük olarak ‘int’ türüne dönüştürülemez.” Şeklinde bir hata verecektir.
Veri Türleri, veri türlerine göre daha da bölünebilir.
- Primitive
- Non-Primitive
Primitive data types önceden tanımlanırken, ilkel olmayan veri türleri kullanıcı tarafından tanımlanır. Bayt, int, short, float, long, char, bool, vb. Gibi veri türleri İlkel veri türleri olarak adlandırılır.
Non-primitive data types include class, enum, array, delegate, etc.
Implicit Conversion
Örtük dönüştürme, en basit dönüştürme türüdür. Bu tür dönüştürme türü güvenlidir ve dönüştürme sırasında veri kaybı olmaz. Bu dönüştürmeler, türetilmiş bir sınıfı temel sınıfa dönüştürmeyi ele alır.
Örneğin, başka bir değişkende saklanması gereken değer veri kaybı olmadan doğrudan sığabiliyorsa örtük dönüşümü doğrudan kullanabiliriz. Diyelim ki bir “integer” değerimiz var ve bu değeri bir “long” a geçirmek istiyoruz.
int i = 75;
long j = i;
Explicit Conversion
Örtük dönüştürmede, türetilmiş bir sınıfı herhangi bir veri kaybetmeden doğrudan temel sınıfa dönüştürebileceğimizi gördük, ancak veri kaybı olasılığı varsa, derleyicinin açık bir dönüştürme gerçekleştirmesi gerekeceğini gördük.
Açık dönüştürme veya dönüştürme, programın olası veri kaybı bilgisi ile dönüştürme gerçekleştirmeye çalıştığı bilgileri derleyiciye iletme işlemidir.
Örneğin, daha yüksek bir sayısal değeri daha düşük bir değere dönüştürüyorsak.
double d = 75.25;
int i;
i = (int)d;
Conversion Using Different Helper Classes
Bir dizeyi bir sayıya veya bir bayt dizisini bir tam sayıya veya hatta onaltılık dizeleri diğer sayısal türlere dönüştürmek gibi farklı uyumlu olmayan türleri dönüştürmek için, doğrudan dönüştürme mümkün olmadığından farklı yardımcı sınıfa ihtiyacımız var.
Bir veri türü, dönüştürme sınıfında bulunan yöntemler kullanılarak veya çeşitli sayı türleri için kullanılabilen bir TryParse yöntemi kullanılarak başka bir veri türüne dönüştürülebilir. TryParse, bir dizeyi rakama dönüştürüyorsak daha kullanışlıdır. Oldukça basit ve verimli.
int number = Int32.Parse(“123”);
Burada parse kullanarak bir dizgeyi tam sayıya dönüştürdük.
Convert yöntemi olan başka bir dönüştürme yöntemine bakalım.
Convert class içinde bulunan statik yöntemler , temel veri türüne veya tam tersine dönüştürme için oldukça kullanışlıdır. Desteklenen veri türlerinden bazıları Char, Boolean, Int32, int64, Double, Decimal, String, Int16, vs.’dir. Convert sınıfı ayrıca diğer dönüştürmeler için yöntemleri de destekler.
Convert To String
Convert.ToString yöntemi bir veri türünü dizeye dönüştürür. Olarak , örneğin , aşağıda, bir integer veri türü bir string veri türü dönüştürürler.
int number = 75;
string s = Convert.ToString(number);
InvalidCastException
Bazen derleyicinin bir türü diğerine dönüştürmek için gerçekleştirilen işlemin geçerli olup olmadığını anlamaması mümkündür. Bu, derleyicinin çalışma zamanı sırasında başarısız olmasına neden olur. Tür dönüşümü başarısız olduğunda, Geçersiz bir istisna atar.
InvalidCastException, açık veya tür dönüştürme uygulaması dönüştürme için kullanılan her iki veri türü tarafından desteklenmediğinde atılır.
Conclusion
Bu eğitimde, dönüştürme türlerini ve farklı veri türleri arasında nasıl dönüştürme yapılacağını öğrendik. Örtük dönüştürme, türetilmiş bir sınıfın int gibi bir temel sınıfa bir float türüne dönüştürülmesidir.
Açık dönüşüm, veri kaybına neden olabilecek dönüşümdür. Açık dönüştürme, temel sınıfı türetilmiş sınıfa dönüştürür. Yardımcı sınıfın yardımını almak için dönüşümü farklı diğer veri türleri üzerinde gerçekleştirmemiz gerekebilir. “Parse” ve “ConvertTo” gibi yardımcı sınıf, bir veri türünü diğerine dönüştürmek için çeşitli yollar sunar.
Ayrıca, iki tür arasındaki dönüşümü anlamadığında compiler atacağı istisnayı da öğrendik.