Aracılığıyla paylaş


Çevrim ve Tür Dönüşümleri (C# Programlama Kılavuzu)

Bir değişkeni sonra C# statik olarak derleme zamanında yazılmış olduğu için yeniden bildirilen veya bu tür değişkenin türüne dönüştürülebilir değilse başka bir türünün değerlerini depolamak için kullanılır.Örneğin, bir tamsayı hiçbir dönüştürme herhangi bir rasgele dize vardır.Bu nedenle, sonra bildirdiğiniz i bir tamsayı, dize "Hello", aşağıdaki kodda gösterildiği gibi atayamazsınız.

int i;
i = "Hello"; // Error: "Cannot implicitly convert type 'string' to 'int'"

Ancak, bazen bir başka bir tür değişken veya yöntem parametre bir değer kopyalamak gerekebilir.Örneğin, bir yöntem parametresi olarak yazılmışsa aktarmanız gereken bir tamsayı değişken olabilir double.Veya bir sınıf değişkeni bir arabirim türü bir değişkene atamanız gerekebilir.Bu tür işlemleri adlı Tür Dönüşümleri.C# [NULL]'ta şu tür dönüştürmeleri gerçekleştirebilirsiniz:

Örtük dönüştürmeler

Saklanan değeri kesildi veya yuvarlanmasını olmadan değişkenine uygun olduğunda bir örtük dönüştürme yerleşik sayısal türler için yapılabilir.Örneğin, türünde bir değişken uzun (8 bayt tamsayı) saklayabilir, değer herhangi bir int (32-bit bir bilgisayarda 4 bayt) saklayabilir.Aşağıdaki örnekte, örtülü bir sağdaki değer derleyicisi long atamak için önce bigNum.

// Implicit conversion. num long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;

Sayısal örtük dönüştürmeler tam listesi için bkz: Kesin sayısal dönüştürme tablosu (C# Reference).

Başvuru tipleri için her zaman kapalı bir dönüştürme bir sınıftan herhangi biri, doğrudan veya dolaylı temel sınıfları veya arabirimleri bulunmaktadır.Özel bir sözdizimi gerekli çünkü türetilmiş bir sınıf her zaman temel sınıf tüm üyeleri içerir.

Derived d = new Derived();
Base b = d; // Always OK.

Açıkça dönüştürmeler

Bilgi kaybetme riski dönüştürme yapılamaz, ancak derleyici olarak adlandırılan açık bir dönüştürme gerçekleştirmek gerekir bir cast.Bir cast dönüştürme yapmak istediğiniz ve veri kaybı oluşabilir uyumlu derleyici açıkça bildiren bir yoludur.Bir dönüştürme işlemi gerçekleştirmek için değer veya değişken dönüştürülecek önüne parantez içinde çevrim türünü belirtin.Aşağıdaki program yayınları bir çift için bir int.Program dönüþtürme olmadan derlenmez.

class Test
{
    static void Main()
    {
        double x = 1234.7;
        int a;
        // Cast double to int.
        a = (int)x;
        System.Console.WriteLine(a);
    }
}
// Output: 1234

İzin verilen sayısal açıkça dönüştürmeleri listesi için bkz: Kesin sayısal dönüştürme tablosu (C# Reference).

Başvuru tipleri için temel türünden türetilen bir türe dönüştürmek gerekirse açık bir dönüþtürme gereklidir:

// Create a new derived type.
Giraffe g = new Giraffe();

// Implicit conversion to base type is safe.
Animal a = g;

// Explicit conversion is required to cast back
// to derived type. Note: This will compile but will
// throw an exception at run time if the right-side
// object is not in fact a Giraffe.
Giraffe g2 = (Giraffe) a;

Cast işlemi başvuru türleri arasındaki temel nesne çalıştırma türünü değiştirmez; yalnızca o nesneye bir başvuru olarak kullanılan değer türünü değiştirir.Daha fazla bilgi için bkz. Çok biçimlilik (C# Programlama Kılavuzu).

Çalışma zamanında tür dönüşümü özel durumlar

Bazı başvuru türü dönüştürmelerinde, derleyici bir cast geçerli olup olmayacağını belirleyemiyor.Çalışma zamanında işlemin başarısız olmasına, doğru derler bir cast mümkündür.Aşağıdaki örnekte gösterildiği gibi çalışma zamanında başarısız olmasına neden olacak bir tür tonunu bir InvalidCastException atılan için.


class Animal
{
    public void Eat() { Console.WriteLine("Eating."); }
    public override string ToString()
    {
        return "I am an animal.";
    }
}
class Reptile : Animal { }
class Mammal : Animal { }

class UnSafeCast
{
    static void Main()
    {            
        Test(new Mammal());

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }

    static void Test(Animal a)
    {
        // Cause InvalidCastException at run time 
        // because Mammal is not convertible to Reptile.
        Reptile r = (Reptile)a;
    }

}

C# sağlar olan ve olarak uyumluluk için bir dönüştürme işlemi gerçekleştirmeden önce test etmek etkinleştirmek için işleçler.Daha fazla bilgi için bkz. Nasıl yapılır: güvenli olarak kullanma artığını ve işleç (C# Programlama Kılavuzu).

C# dil belirtiminin

Daha fazla bilgi için bkz: C# dil belirtiminin. Dil belirtimi, C# sözdizimi ve kullanımı için nihai kaynaktır.

Tanıtılan kitap bölüm

Değişkenler hakkında daha fazla bilgi , başına Visual C# 2010

Ayrıca bkz.

Görevler

Nasıl yapılır: Bir dizeyi sayıya dönüştürme (C# Programlama Kılavuzu)

Başvuru

Türleri (C# Programlama Kılavuzu)

() İşleci (C# Reference)

Açık (C# Reference)

örtülü (C# Reference)

Dönüştürme işleçleri (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

Genelleştirilmiş tür dönüştürmesi

Verilen tür dönüştürmesi