型 S のオブジェクトを型 T のオブジェクトに割り当てることができる場合(SET obj-T TO obj-S)、型 S から型 T への暗黙的な変換が存在します。
.NET システムでは、次の種類の暗黙的な変換を使用できます。
- ID 変換
これは、単に S と T の型が同じであることを意味します。
- 暗黙的な数値変換
COBOL では、通常、数値項目を他の項目に割り当てることができますが、データの損失はユーザーの責任になります。ただし、メソッド オーバーロードの目的で変換が存在するかどうかを確認するときには、適切な変換と切り捨て変換を区別します。適切な変換とは、大量のデータが損失するようなことがない変換です。ただし、この場合でも、固定小数点と浮動小数点の間を変換するときに精度が落ちる可能性はあります。
.NET ネイティブ型の場合、次の暗黙的な変換が適切な変換です。
- BINARY-CHAR から BINARY-SHORT、BINARY-LONG、BINARY-DOUBLE、FLOAT-SHORT、FLOAT-LONG、および DECIMAL への変換
- BINARY-CHAR UNSIGNED から上記すべての型および BINARY-SHORT UNSIGNED、BINARY-LONG UNSIGNED、BINARY-DOUBLE UNSIGNED への変換
- BINARY-SHORT から BINARY-LONG、BINARY-DOUBLE、FLOAT-SHORT、FLOAT-LONG、および DECIMAL への変換
- BINARY-SHORT UNSIGNED から上記すべての型および BINARY-LONG UNSIGNED、BINARY-DOUBLE UNSIGNED への変換
- BINARY-LONG から BINARY-DOUBLE、FLOAT-SHORT、FLOAT-LONG、および DECIMAL への変換
- BINARY-LONG UNSIGNED から上記すべての型および BINARY-DOUBLE UNSIGNED への変換
- BINARY-DOUBLE から FLOAT-SHORT、FLOAT-LONG、および DECIMAL への変換
- BINARY-DOUBLE UNSIGNED から上記すべての型への変換
- CHARACTER から BINARY-SHORT UNSIGNED、BINARY-LONG、BINARY-LONG UNSIGNED、BINARY-DOUBLE、BINARY-DOUBLE UNSIGNED、FLOAT-SHORT、FLOAT-LONG、および DECIMAL への変換
- FLOAT-SHORT から FLOAT-LONG への変換
- 暗黙的な列挙値変換
値 0 は任意の列挙型に変換できます。
- 暗黙的な参照変換
S と T が参照型である場合、次の状況に該当するときに S を T に割り当てることができます。
- 型 S が型 T から(直接的または間接的に)派生している。すべての型が System.Object から派生するため、T が System.Object である場合も含まれます。
- 型 S がインターフェイス型 T を実装している。
- S が要素型 E1 の配列型であり、T が要素型 E2 の配列型である場合、次の条件を満たせば S を T に割り当てることができる。
- S と T の次元数が同じである。
- E1 と E2 がどちらも参照型である。
- E1 から E2 への暗黙的な変換が存在する。
- 任意の配列型を System.Array 型に割り当てることができる。
- 任意のデリゲート型を System.Delegate 型に割り当てることができる。
- Null を任意の参照型に割り当てることができる。
- ボックス化変換
ボックス化と呼ばれるプロセスを使用すると、任意の値型を System.Object 型に変換できます。このプロセスの一環として、値がオブジェクト ヒープにコピーされ、参照が作成されます。
- 暗黙的な定数式変換
任意の数値定数を任意の型(その定数の完全な値を格納できる型)に変換できます。たとえば、値 1 は BINARY-CHAR UNSIGNED と BINARY-CHAR の両方に変換できます。
- 暗黙的なユーザー定義変換
暗黙的なユーザー定義変換は、S から S1 への暗黙的な数値変換(省略可能)、暗黙的なユーザー定義変換演算子の実行(T1 の生成)、T への暗黙的な数値変換(省略可能)の順に行われます。暗黙的なユーザー定義変換演算子は、COBOL の OPERATOR-ID IMPLICIT で定義され、op_Implicit という名前のメソッドを生成します。