Utilizzo degli operatori di conversione (Guida per programmatori C#)
Gli operatori di conversione possono essere explicit o implicit. Gli operatori di conversione impliciti sono più facili da utilizzare, mentre gli operatori espliciti risultano utili quando si desidera che gli utenti dell'operatore siano consapevoli che è in corso una conversione. In questo argomento vengono descritti entrambi i tipi.
Esempio
In questo caso si parla di operatore di conversione esplicito. Questo operatore esegue la conversione dal tipo Byte a un tipo di valore denominato Digit. Poiché non è possibile convertire in cifre tutti i byte, la conversione è di tipo esplicito ed è pertanto necessario utilizzare un cast, come illustrato nel metodo Main.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.
In questo esempio viene illustrato un operatore di conversione implicito definendo un operatore di conversione che annulla l'operazione eseguita nell'esempio 1: converte una classe di valori denominata Digit in un tipo Byte integrale. Poiché è possibile convertire ogni cifra in Byte, non è necessario forzare gli utenti ad eseguire una conversione esplicita.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}
class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.
Vedere anche
Riferimenti
Operatori di conversione (Guida per programmatori C#)