Операторы преобразования
Обновлен: Ноябрь 2007
Операторы преобразования служат для преобразования объекта из одного типа в другой. Операторы преобразования делятся на неявные и явные. Для неявных операторов преобразования не требуется, чтобы приведение типов было определено в исходном коде для выполнения преобразования. Для выполнения преобразования явными операторами требуется, чтобы приведение типов присутствовало в исходном коде.
В следующей подписи показан явный оператор преобразования класса 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. Все права защищены.
Дополнительные сведения о рекомендациях по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.