Использование операторов преобразования (Руководство по программированию в C#)
Операторы преобразования implicit, которые удобно использовать для использования или операторы преобразования explicit, которые указывают, чтения на любой код, а преобразование типа. В этом разделе показаны оба типа оператора преобразования.
Примечание
Дополнительные сведения о преобразовании простого типа см. в разделе Практическое руководство. Преобразование строки в число (руководство по программированию в C#), Практическое руководство. Преобразование массива байтов в значение типа int (Руководство по программированию на C#), Практическое руководство. Преобразование из шестнадцатеричных строк в числовые типы (Руководство по программированию на C#) или Convert.
Пример
В этом примере используется оператор явного преобразования. Этот оператор преобразует тип значения Byte в тип значения Digit. Поскольку в тип Digit могут быть преобразованы не все значения типа byte, преобразование выполняется явным образом, что означает использование операции приведения, как показано в методе 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.
В этом примере демонстрируется неявное преобразование, в котором определяется оператор преобразования, выполняющий операцию, обратную описанной в предыдущем примере: преобразование значения типа Digit к целочисленному типу Byte. Поскольку к типу Byte можно преобразовать любое значение типа Digit, нет нужды делать преобразование явным для пользователя.
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.
См. также
Ссылки
Операторы преобразования (Руководство по программированию в C#)
Основные понятия
Руководство по программированию на C#