Sdílet prostřednictvím


explicitní (C#-Reference)

explicit Klíčové slovo prohlašuje operátor převodu uživatelem definovaný typ musí být vyvolána s přetypování.Například tento operátor převede ze třídy s názvem třídy se nazývá Celsia Fahrenheita:

// Must be defined inside a class called Fahrenheit:
public static explicit operator Celsius(Fahrenheit fahr)
{
    return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32));
}

Tento operátor převodu lze vyvolat následovně:

Fahrenheit fahr = new Fahrenheit(100.0f);
Console.Write("{0} Fahrenheit", fahr.Degrees);
Celsius c = (Celsius)fahr;

Převede operátor převodu z typu zdroje typ cíle.Typ zdroje poskytuje operátor převodu.Na rozdíl od implicitní převod musí vyvolat operátory explicitní převod pomocí přetypování.Pokud operace převodu může způsobit výjimky nebo ztrátu informací, by ji označit explicit.To zabrání kompilátoru tiše vyvolání operace převodu se případně nepředvídatelné následky.

Vynechání přetypování výsledky v chybě kompilace CS0266.

Další informace naleznete v tématu Operátory převodu (C# programování Guide).

Příklad

Následující příklad uvádí Fahrenheit a Celsius třídy, z nichž každý obsahuje explicitní operátor převodu do jiné třídy.


class Celsius
{
    public Celsius(float temp)
    {
        degrees = temp;
    }
    public static explicit operator Fahrenheit(Celsius c)
    {
        return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32);
    }
    public float Degrees
    {
        get { return degrees; }
    }
    private float degrees;
}

class Fahrenheit
{
    public Fahrenheit(float temp)
    {
        degrees = temp;
    }
    // Must be defined inside a class called Fahrenheit:
    public static explicit operator Celsius(Fahrenheit fahr)
    {
        return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32));
    }
    public float Degrees
    {
        get { return degrees; }
    }
    private float degrees;
}

class MainClass
{
    static void Main()
    {
        Fahrenheit fahr = new Fahrenheit(100.0f);
        Console.Write("{0} Fahrenheit", fahr.Degrees);
        Celsius c = (Celsius)fahr;

        Console.Write(" = {0} Celsius", c.Degrees);
        Fahrenheit fahr2 = (Fahrenheit)c;
        Console.WriteLine(" = {0} Fahrenheit", fahr2.Degrees);
    }
}
// Output:
// 100 Fahrenheit = 37.77778 Celsius = 100 Fahrenheit

Následující příklad definuje strukturu, Digit, která představuje jednociferné desítkové.Operátor je definován pro převody z byte na Digit, ale protože ne všechny bajty lze převést na Digit, je explicitní převod.

struct Digit
{
    byte value;
    public Digit(byte value)
    {
        if (value > 9)
        {
            throw new ArgumentException();
        }
        this.value = value;
    }

    // Define explicit byte-to-Digit conversion operator:
    public static explicit operator Digit(byte b)
    {
        Digit d = new Digit(b);
        Console.WriteLine("conversion occurred");
        return d;
    }
}

class ExplicitTest
{
    static void Main()
    {
        try
        {
            byte b = 3;
            Digit d = (Digit)b; // explicit conversion
        }
        catch (Exception e)
        {
            Console.WriteLine("{0} Exception caught.", e);
        }
    }
}
/*
Output:
conversion occurred
*/

Specifikace jazyka C#

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

Viz také

Úkoly

Jak: implementace uživatelem definované převody mezi struktur (C# Příručka programování)

Referenční dokumentace

Klíčová slova jazyka C#

implicitní (C#-Reference)

operátor (C#-Reference)

Koncepty

Příručka programování C#

Další zdroje

C#-Reference

Zřetězené explicitní převody uživatelem definované v jazyce C#