Použití operátorů převodu (Průvodce programováním v C#)
Je možné použít operátory převodů implicit, které jsou jednodušší, nebo operátory převodů explicit, které jasně označují každému, kdo čte kód, že převádíte typ.Toto téma ukazuje oba typy operátoru převodu.
[!POZNÁMKA]
Informace o převodech jednoduchého typu naleznete v tématu Postupy: Převedení řetězce na číslo (Průvodce programováním v C#), Postupy: Převedení pole bajtů na typ int (Průvodce programováním v C#), Postupy: Převod mezi hexadecimálními řetězci a číselnými typy (Průvodce programováním v C#) nebo Convert.
Příklad
Toto je příklad explicitního operátoru převodu.Tento operátor převede typ Byte na hodnotu s názvem Digit.Vzhledem k tomu, že ne všechny bajty mohou být převedeny na číslice, je převod explicitní a znamená, že musí být použito přetypování, jak je znázorněno v metodě 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.
Tento příklad ukazuje operátor implicitního převodu definováním operátoru převodu, který vrátí zpět, co předchozí příklad udělal: převede z hodnotové třídy s názvem Digit na integrál typu Byte.Protože libovolná číslice může být převedena na Byte, není potřeba přinutit uživatele k explicitnímu převodu.
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.
Viz také
Referenční dokumentace
Operátory převodu (Průvodce programováním v C#)
is (Referenční dokumentace jazyka C#)