更新 : 2007 年 11 月
変換演算子は、オブジェクトの型を別の型に変換します。変換演算子は、暗黙の形式にも明示的な形式にもできます。暗黙の変換演算子は、ソース コードで型キャストを指定しなくても変換を実行できます。明示的な変換演算子で変換を実行するには、ソース コードに型キャストが存在する必要があります。
次のシグネチャは、Point と Size の間で変換するための Point クラスの明示的な変換演算子を示しています。
[Visual Basic]
Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size
[C#]
public static Size op_Explicit(
Point p
);
このような変換に対する明確な要望がエンド ユーザーにない場合は、変換演算子を提供しないでください。
理想的には、変換演算子の定義をサポートするかどうかを決定するには、顧客調査を行う必要があります。または、変換演算子が必要な類似の型の例を 1 つ以上示すという形で、変換演算子の定義をサポートすることもできます。
型のドメインの外部で変換演算子を定義しないでください。
たとえば、Int32、Double、および Decimal はすべて数値型ですが、DateTime は数値型ではありません。Double 型から DateTime 型に変換する変換演算子は実装しないでください。ある型を同じドメインに属さない別の型に変換するには、コンストラクタを使用します。
損失を伴う可能性がある場合は、暗黙の変換演算子を提供しないでください。
たとえば、Double は Single よりも精度が高いため、Double から Single への暗黙の変換は行わないようにします。損失を伴う変換については、明示的な変換演算子を提供できます。
暗黙のキャストから例外をスローしないでください。
暗黙のキャストはシステムによって呼び出されます。そのため、ユーザーは変換が行われていることに気付かない可能性があり、コードのデバッグが困難になります。
キャスト演算子を呼び出した結果、損失を伴う変換が行われ、演算子のコントラクトで損失を伴う変換が許可されていない場合は、System.InvalidCastException をスローしてください。
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。