COBOL では、最もよく使用される .NET 型の多くについて、対応する用途が事前定義されている。これらの名前はデータ項目の宣言時に使用でき、また、型指定子をとる場所であればどこででも使用できる。詳細については、「型名の指定」を参照。次に例を示す。
01 anInteger binary-long.
.NET または JVM COBOL | .NET の型 | JVM の型 | C# のキーワード | 説明 |
---|---|---|---|---|
整数型: | ||||
binary-char | System.SByte | byte | sbyte | 8 ビット符号付き整数
非 CLS 準拠 |
binary-char unsigned | System.Byte | byte | 8 ビット符号なし整数 | |
binary-short | System.Int16 | short | short | 16 ビット符号付き整数
非 CLS 準拠 |
binary-short unsigned | System.UInt16 | ushort | 16 ビット符号なし整数 | |
binary-long | System.Int32 | int | int | 32 ビット符号付き整数 |
binary-long unsigned | System.UInt32 | uint | 32 ビット符号なし整数
非 CLS 準拠 |
|
binary-double | System.Int64 | long | long | 64 ビット符号付き整数 |
binary-double unsigned | System.UInt64 | ulong | 64 ビット符号なし整数
非 CLS 準拠 |
|
浮動小数点型: | ||||
float-short | System.Single | float | float | 単精度 (32 ビット) 浮動小数点数 |
float-long | System.Double | double | double | 倍精度 (64 ビット) 浮動小数点数 |
論理型: | ||||
condition-value | System.Boolean | boolean | bool | ブール値 (true または false) |
その他の型: | ||||
character | System.Char | char | char | Unicode (16 ビット) 文字 |
decimal | System.Decimal | 「JVMDECIMAL」を参照してください。 | decimal | 96 ビット 10 進値 |
クラス オブジェクト: | ||||
object | System.Object | java.lang.Object | object | オブジェクト階層のルート |
string | System.String | java.lang.String | string | Unicode 文字の不変固定長文字列 |
コレクション型: | ||||
list | System.Collections.Generic.IList<T> | java.util.List | 順序が指定された項目のコレクション | |
dictionary | System.Collections.Generic.IDictionary<TKey, TValue> | java.util.Map | キーと値のマッピング | |
set | System.Collections.Generic.ISet<T> | java.util.Set<T> | 順序が指定されていない項目のコレクション |
その他のマネージ型は、COBOL ではデータ項目の定義において TYPE classname 構文を使用することで指定できる。次に例を示す。
01 objMyType type MyType.
上記の表の COBOL データ型と、ユーザーが定義するその他の .NET 型はすべて、対応するネイティブ型 (.NET または JVM) にマップされるが、次のルールに従う必要がある。マネージ型のルールは次のようになる。
COBOL データ項目がこれらのルールに従わない場合や他の項類である場合、その項目はネイティブ型 (.NET または JVM) と見なされず、内部マネージ バイト配列内でコンパイラによって割り当てられる。COBOL ポインター データ項目は、必ずこのいずれかのバイト配列を示す。
コードにおいて、属するネームスペースを指定せずに型を参照した場合、コンパイラはまずこれを、現在のクラスのネームスペースを型名に付加して構成した型に解決しようとする。次に例を示す。
$set ilusing"System" class-id MyNamespace.EventHandler.01 o type EventHandler. end class.
上記の例では、01 o type EventHandler. は System.EventHandler ではなく MyNamespace.EventHandler に解決される。
該当する型が存在しない場合、コンパイラは明示されなかった型を以下のリストの順序で解決しようとする。
.NET COBOL では、次の型が区別される。
すべての値型は、ボックス化と呼ばれるプロセスで参照型に変わることがある。たとえば、オブジェクト参照を、binary-long などの値型に設定できる。
ボックス化は、必要に応じて自動で行われる。たとえば、オブジェクトをパラメーターとして予測するメソッドに値型をパラメーターとして渡す場合など。
明示的にボックス化するには、値型を汎用型 (.NET COBOL の System.Object や JVM COBOL の java.lang.Object など) に割り当てる。
値型のボックス化を解除して、元の値型を復元できる。
データ項目の定義で TYPE classname を指定すると、次のようになる。
ボックス化の際に、値がオブジェクト ヒープにコピーされ、参照がオブジェクト ヒープに戻される。参照がアクティブではなくなった場合 (オブジェクト ヒープに対して保持するものがプログラム内にないため)、オブジェクト ヒープのスペースは、ガベージ コレクターで最終的に再取得される。
次の場所にある ValueType のサンプルを参照のこと。 [スタート > すべてのプログラム > Micro Focus Visual COBOL > Samples]、COBOL for .NET の場合。