Определяемые пользователем явные и неявные операторы преобразования
Статья
Пользовательский тип может определять неявное или явное пользовательское преобразование в другой тип или из него. Неявные преобразования не требуют вызова специального синтаксиса и могут возникать в различных ситуациях, например в вызовах назначений и методов. Предопределенные неявные преобразования на C# всегда завершаются успешно и никогда не вызывают исключение. Неявные пользовательские преобразования должны вести себя таким же образом. Если пользовательское преобразование может вызвать исключение или привести к потере данных, определите его как явное преобразование.
Определяемые пользователем преобразования не считаются операторами. Используйте выражение приведения для вызова явного пользовательского преобразования.
Используйте ключевые слова operator и implicit или explicit для определения явного или неявного преобразования соответственно. Тип, который определяет преобразование, должен быть типом источника или целевого объекта этого преобразования. Преобразование между двумя пользовательскими типами можно определить одним из двух типов.
Следующий пример иллюстрирует, как определить неявное и явное преобразования:
C#
using System;
publicreadonlystruct Digit
{
privatereadonlybyte digit;
publicDigit(byte digit)
{
if (digit > 9)
{
thrownew ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
publicstaticimplicitoperatorbyte(Digit d) => d.digit;
publicstaticexplicitoperatorDigit(byte b) => new Digit(b);
publicoverridestringToString() => $"{digit}";
}
publicstaticclassUserDefinedConversions
{
publicstaticvoidMain()
{
var d = new Digit(7);
byte number = d;
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
}
}
Можно также использовать ключевое слово operator для перегрузки предопределенного оператора C#. Для получения дополнительной информации см. раздел Перегрузка операторов.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.