Sdílet prostřednictvím


Přetypování a převody typů (Průvodce programováním v C#)

C# je staticky zadávané v době kompilace po je proměnná deklarována, nelze znovu deklarována nebo použít k uložení hodnoty jiného typu, pokud je převést na typ proměnné typu.Například je celé číslo bez převodu na libovolný řetězec.Proto po deklarujete i jako celé číslo nelze přiřadit řetězec "Hello", jak ukazuje následující kód.

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

Však může být někdy nutné zkopírovat do jiného typu parametru proměnnou nebo metodu hodnotu.Může mít například proměnná typu integer, které chcete předat do metody zadané jako parametr, jehož double.Nebo je třeba přiřadit proměnné třídy proměnné typu rozhraní.Tyto druhy operací se nazývají převody typu.V jazyce C# můžete provést následující typy převodů:

Implicitní převody

Předdefinované číselné typy implicitní převod lze provést, když hodnoty uložené vejde do proměnné bez zkrácen nebo zaokrouhlena.Například proměnná typu dlouhé (celé číslo 8 bajtů) lze uložit libovolné hodnoty, int (4 bajty 32bitové počítače) můžete uložit.V následujícím příkladu kompilátor implicitně převede hodnotu na pravé straně typu long před přiřazením k bigNum.

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

Úplný seznam všech implicitní převody číselný, viz Tabulka implicitních číselných převodů (Referenční dokumentace jazyka C#).

Pro referenční typy existuje vždy implicitní převod z třídy k žádné rozhraní nebo přímé nebo nepřímé základní třídy.Žádné speciální syntaxi je nezbytné, protože odvozené třídy vždy obsahuje členy základní třídy.

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

Explicitní převody

Však pokud převod nelze bez rizika ztráty informací, kompilátor vyžaduje provést explicitní převod, nazývá cast.Osazení způsobem explicitně informování kompilátor úmyslu provést převod a že jste si vědomi, že může dojít ke ztrátě dat.Provést osazení zadejte typ, který se obsazení do v závorkách u hodnota nebo proměnná převést.Následující program nádech dvojité k int.Program nebude kompilován bez tavby.

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

Seznam číselných explicitní převody, které jsou povoleny, viz Tabulka explicitních číselných převodů (Referenční dokumentace jazyka C#).

Pro referenční typy explicitní cast je vyžadován, pokud potřebujete převést základní typ odvozený typ:

// 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;

Osazení operace mezi typy odkazů nemění typ spuštění základní objekt; změní pouze typ hodnoty, který slouží jako odkaz na objekt.Další informace naleznete v tématu Polymorfismus (Průvodce programováním v C#).

Typ převodu výjimky v době spuštění

Kompilátor v některé převody typu odkaz, nelze určit zda bude platné osazení.Je možné pro osazení operaci, která sestaví správně k chybě za běhu.Jak ukazuje následující příklad, typ nádech, že dojde k chybě za běhu způsobí, že InvalidCastException se vyvolá.

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# obsahuje je a jako operátorů, umožňuje testování kompatibility před jeho skutečným provedením osazení.Další informace naleznete v tématu Postupy: Bezpečné přetypování pomocí operátorů as a is (Průvodce programováním v C#).

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Kapitola hlavní knihy

Další informace o proměnných v začátek Visual C# 2010

Viz také

Úkoly

Postupy: Převedení řetězce na číslo (Průvodce programováním v C#)

Referenční dokumentace

Typy (Průvodce programováním v C#)

() – operátor (Referenční dokumentace jazyka C#)

explicit (Referenční dokumentace jazyka C#)

implicit (referenční dokumentace jazyka C#)

Operátory převodu (Průvodce programováním v C#)

Koncepty

Průvodce programováním v C#

Převod zobecněného typu

Převod exportovaného typu