Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
C# derleme zamanında statik olarak yazıldığı için, bir değişken bildirildikten sonra, bu tür değişkenin türüne örtük olarak dönüştürülebilir olmadığı sürece yeniden bildirilemez veya başka türde bir değer atanamaz. Örneğin, string
, örtük olarak int
'e dönüştürülemez. Bu nedenle, i
öğesini bir int
olarak bildirdikten sonra, aşağıdaki kodda gösterildiği gibi ona "Hello" dizesini atayamazsınız.
int i;
// error CS0029: can't implicitly convert type 'string' to 'int'
i = "Hello";
Ancak, bazen bir değeri başka bir türe ait bir değişkene veya yöntem parametresine kopyalamanız gerekebilir. Örneğin, parametresi olarak double
yazılan bir yönteme geçirmeniz gereken bir tamsayı değişkeniniz olabilir. Veya bir arabirim türünün değişkenine sınıf değişkeni atamanız gerekebilir. Bu tür işlemler tür dönüştürmeleri olarak adlandırılır. C# dilinde aşağıdaki dönüştürme türlerini gerçekleştirebilirsiniz:
Örtük dönüştürmeler: Dönüştürme her zaman başarılı olduğundan ve veri kaybı olmadığından özel bir söz dizimi gerekmez. Örnek olarak küçükten büyük tam sayı türlerine dönüştürmeler, türetilmiş sınıflardan temel sınıflara dönüştürmeler ve span dönüştürmeleri verilebilir.
Açık dönüştürmeler (atamalar): Açık dönüştürmeler bir atama ifadesi gerektirir. Dönüştürmede bilgi kaybolabileceği veya dönüştürmenin başka nedenlerle başarılı olmayabileceği durumlarda atama gereklidir. Tipik örnekler arasında daha az duyarlığa veya daha küçük bir aralığa sahip bir türe sayısal dönüştürme ve temel sınıf örneğinin türetilmiş bir sınıfa dönüştürülmesi verilebilir.
Kullanıcı tanımlı dönüştürmeler: Kullanıcı tanımlı dönüştürmeler, temel sınıf türetilmiş sınıf ilişkisi olmayan özel türler arasında açık ve örtük dönüştürmeleri etkinleştirmek için tanımlayabileceğiniz özel yöntemler kullanır. Daha fazla bilgi için bkz . Kullanıcı tanımlı dönüştürme işleçleri.
Yardımcı sınıflarla dönüştürmeler: Tamsayılar ve nesneler veya onaltılık dizeler ve System.DateTime bayt dizileri gibi uyumsuz türler arasında dönüştürme yapmak için sınıfını, System.BitConverter sınıfını ve System.Convert gibi
Parse
yerleşik sayısal türlerin yöntemlerini kullanabilirsinizInt32.Parse. Daha fazla bilgi için aşağıdaki makalelere bakın:Hexadecimal dizeler ile sayısal türler arasında nasıl dönüştürülür
Örtük dönüştürmeler
Yerleşik sayısal türler için, depolanacak değer kırpılmadan veya yuvarlanmadan değişkene sığabildiğinde örtük dönüştürme yapılabilir. Tam sayı türleri için bu kısıtlama, kaynak türü aralığının hedef türü için aralığın uygun bir alt kümesi olduğu anlamına gelir. Örneğin, long (64 bit tamsayı) türünde bir değişken, int (32 bit tamsayı) tarafından depolanabilir herhangi bir değeri depolayabilir. Aşağıdaki örnekte, derleyici sağdaki num
değerini long
türüne dönüştürerek bigNum
'ye atamadan önce örtük olarak dönüştürür.
// Implicit conversion. A long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;
Tüm örtük sayısal dönüştürmelerin tam listesi için Örtük sayısal dönüşümler bölümüne Yerleşik sayısal dönüşümler makalesinden bakın.
Referans türleri için, özünde bir sınıftan her zaman doğrudan veya dolaylı olarak temel sınıflarından veya arayüzlerinden herhangi birine dönüşüm vardır. Türetilmiş bir sınıf her zaman bir temel sınıfın tüm üyelerini içerdiğinden özel söz dizimi gerekmez.
Derived d = new Derived();
// Always OK.
Base b = d;
Açık dönüştürmeler
Ancak, bilgi kaybı riski olmadan bir dönüştürme yapılamıyorsa, derleyici sizden açık bir dönüştürme yapmanızı gerektirir, bu işlem de 'cast' olarak adlandırılır. Atama, dönüştürmeyi açıkça yapmanın bir yoludur. Veri kaybı olabileceğini veya atamanın çalışma zamanında başarısız olabileceğini fark ettiğinizi gösterir. Bir dönüşüm gerçekleştirmek için, çevirmek istediğiniz ifadeden önce hedef türü parantez içinde belirtin. Aşağıdaki program bir double'ı int'e dönüştürür. Program, dönüştürme olmadan derlenemez.
double x = 1234.7;
int a;
// Cast double to int.
a = (int)x;
Console.WriteLine(a);
// Output: 1234
Desteklenen açık sayısal dönüştürmelerin tam listesi için Yerleşik sayısal dönüştürmeler makalesinin Açık sayısal dönüştürmeler bölümüne bakın.
Referans türleri için, bir temel türden türetilmiş türe dönüştürmeniz gerekiyorsa açık bir dönüşüm gereklidir.
Başvuru türleri arasındaki atama işlemi, temel alınan nesnenin çalışma zamanı türünü değiştirmez; yalnızca bu nesneye başvuru olarak kullanılan değerin türünü değiştirir. Daha fazla bilgi için bkz . Polimorfizm.
Çalışma zamanında tür dönüştürme istisnaları
Bazı başvuru türü dönüştürmelerinde, derleyici bir dönüştürmenin geçerli olup olmadığını belirleyemez. Doğru derlenen bir dönüşüm işleminin çalışma zamanında başarısız olması mümkündür. Aşağıdaki örnekte gösterildiği gibi, çalışma zamanında başarısız olan bir tür ataması bir InvalidCastException atılması neden olur.
Animal a = new Mammal();
Reptile r = (Reptile)a; // InvalidCastException at run time
Bağımsız değişkeni a
açıkça bir Reptile
'e dönüştürmek tehlikeli bir varsayımdır. Varsayımlarda bulunmak yerine türünü denetlemek daha güvenlidir. C#, bir tür dönüşümü gerçekleştirmeden önce uyumluluğu test etmenizi sağlayan is
işleçini sağlar. Daha fazla bilgi için bkz. Desen eşleştirme ve as ve is işleçlerini kullanarak güvenli bir şekilde atama.
C# dil belirtimi
Daha fazla bilgi için C# dil belirtimininDönüştürmeler bölümüne bakın.