Condividi tramite


explicit (Riferimenti per C#)

La parola chiave explicit dichiara un operatore di conversione di tipi definito dall'utente che è necessario richiamare con un cast.Il seguente operatore esegue ad esempio la conversione da una classe denominata Fahrenheit a una classe denominata Celsius:

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

Questo operatore di conversione può essere richiamato nel seguente modo:

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

L'operatore di conversione esegue la conversione da un tipo di origine a un tipo di destinazione.Il tipo di origine fornisce l'operatore di conversione.A differenza di quanto avviene per le conversioni implicite, gli operatori di conversione espliciti devono essere richiamati mediante un cast.Se un'operazione di conversione può provocare eccezioni o la perdita di informazioni, è opportuno contrassegnarla come explicit,per evitare che il compilatore richiami automaticamente l'operazione di conversione con conseguenze imprevedibili.

Se si omettono i risultati del cast, viene generato l'errore in fase di compilazione CS0266.

Per ulteriori informazioni, vedere Utilizzo degli operatori di conversione (Guida per programmatori C#).

Esempio

Nell'esempio riportato di seguito vengono utilizzate una classe Fahrenheit e una classe Celsius, ciascuna delle quali fornisce un operatore di conversione esplicito all'altra classe.


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

Nell'esempio riportato di seguito viene definita la struttura Digit che rappresenta una singola cifra decimale.Viene definito un operatore per le conversioni da byte a Digit; tuttavia, poiché non è possibile convertire tutti i byte in un valore Digit, la conversione è esplicita.

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

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Attività

Procedura: implementare conversioni tra struct definite dall'utente (Guida per programmatori C#)

Riferimenti

Parole chiave di C#

implicit (Riferimenti per C#)

operator (Riferimenti per C#)

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#

Conversioni esplicite definite dall'utente concatenate in C#