Поделиться через


Операторы преобразования

Операторы преобразования служат для преобразования объекта из одного типа в другой. Операторы преобразования делятся на неявные и явные. Для неявных операторов преобразования не требуется, чтобы приведение типов было определено в исходном коде для выполнения преобразования. Для выполнения преобразования явными операторами требуется, чтобы приведение типов присутствовало в исходном коде.

В следующей сигнатуре показан явный оператор преобразования класса Point для преобразования между типами Point и Size.

[Visual Basic]

Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size

[C#]

public static Size op_Explicit(
Point p
);

Не предоставляйте оператор преобразования, если в таком преобразовании нет явной необходимости со стороны конечных пользователей.

В идеальном случае при определении оператора преобразования следует использовать данные по исследованию требований клиентов. С другой стороны, поддержка для оператора может существовать в форме примеров, где такое преобразование требуется для одного или нескольких похожих типов.

Не определяйте операторы преобразования за пределами области типа.

Например, Int32, Double и Decimal являются числовыми типами, в то время как DateTime не является таковым. Преобразование типа Double в тип DateTime не должно быть реализовано в качестве оператора преобразования. Для преобразования типа в тип из другой области используйте конструктор.

Не предоставляйте неявный оператор преобразования, если это преобразование может привести к потере точности.

Например, не должно быть неявного преобразования из типа Double в тип Single, так как тип Double имеет большую точность, чем Single. Для преобразований, которые могут повлечь за собой потери точности, можно предоставить явный оператор преобразования.

Не вызывайте исключения из неявных приведений типов.

Неявные приведения типов вызываются системой; пользователь может не знать о выполнении преобразования и столкнется с трудностями при отладке кода.

Если вызов оператора преобразования приводит к преобразованию с потерей точности, а контракт оператора не позволяет выполнения таких преобразований, вызывайте исключение "System.InvalidCastException".

Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Другие ресурсы

Правила разработки членов

Руководство по разработке библиотек классов