Uživatelsky definované operátory převodu (Referenční dokumentace jazyka C#)
Uživatelsky definovaný typ může definovat vlastní implicitní nebo explicitní převod z nebo na jiný typ.
Implicitní převody nevyžadují, aby se vyvolala speciální syntaxe, která může nastat v různých situacích, například v přiřazení a volání metod. Předdefinované implicitní převody jazyka C# jsou vždy úspěšné a nikdy nevyvolávají výjimku. Uživatelem definované implicitní převody by se měly chovat i tímto způsobem. Pokud vlastní převod může vyvolat výjimku nebo ztratit informace, definujte ji jako explicitní převod.
Uživatelem definované převody nejsou považovány za operátory is a as . Použijte výraz přetypování k vyvolání uživatelem definovaného explicitního převodu.
Použijte operator implicit explicit klíčová slova a nebo pro definování implicitního nebo explicitního převodu v uvedeném pořadí. Typ, který definuje převod, musí být buď zdrojový typ, nebo cílový typ převodu. Převod mezi dvěma uživatelsky definovanými typy lze definovat v jednom ze dvou typů.
Následující příklad ukazuje, jak definovat implicitní a explicitní převod:
using System;
public readonly struct Digit
{
private readonly byte digit;
public Digit(byte digit)
{
if (digit > 9)
{
throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
public override string ToString() => $"{digit}";
}
public static class UserDefinedConversions
{
public static void Main()
{
var d = new Digit(7);
byte number = d;
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
}
}
Klíčové slovo lze použít také operator k přetížení předdefinovaného operátoru jazyka C#. Další informace naleznete v tématu přetížení operátoru.
specifikace jazyka C#
Další informace naleznete v následujících oddílech specifikace jazyka C#: