Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определяемый пользователем тип может определять пользовательское неявное или явное преобразование из другого типа, если стандартное преобразование не существует между теми же двумя типами. Неявные преобразования не требуют вызова специального синтаксиса и могут возникать в различных ситуациях, например в вызовах назначений и методов. Предопределенные неявные преобразования C# всегда успешно выполнены и никогда не вызывают исключения. Определяемые пользователем неявные преобразования должны вести себя так же. Если настраиваемое преобразование может вызвать исключение или потерять сведения, определите его как явное преобразование.
Операторы не учитывают определяемые пользователем преобразования. Используйте выражение приведения для вызова явного преобразования, определяемого пользователем.
operator
Используйте ключевые слова для implicit
explicit
определения неявного или явного преобразования соответственно. Тип, определяющий преобразование, должен быть либо типом источника, либо целевым типом этого преобразования. Преобразование между двумя определяемыми пользователем типами можно определить в любом из двух типов.
В следующем примере показано, как определить неявное и явное преобразование:
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
}
}
Начиная с C# 11, можно определить проверенные явные операторы преобразования. Дополнительные сведения см. в разделе Проверенные операторы, определяемые пользователем статьи Арифметические операторы.
Вы также используете ключевое operator
слово для перегрузки предопределенного оператора C#. Дополнительные сведения см. в разделе " Перегрузка оператора".
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:
- Операторы преобразования
- Определяемые пользователем преобразования
- Неявные преобразования
- Явные преобразования