NETJVM 

.NET COBOL のデータ型

COBOL では、最もよく使用される .NET 型の多くについて、対応する用途が事前定義されている。これらの名前はデータ項目の宣言時に使用でき、また、型指定子をとる場所であればどこででも使用できる。詳細については、「型名の指定」を参照。次に例を示す。

01 anInteger binary-long.

事前定義された .NET

.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>   順序が指定されていない項目のコレクション

キーワード TYPE の使用による型の参照

その他のマネージ型は、COBOL ではデータ項目の定義において TYPE classname 構文を使用することで指定できる。次に例を示す。

01 objMyType type MyType.

上記の表の COBOL データ型と、ユーザーが定義するその他の .NET 型はすべて、対応するネイティブ型 (.NET または JVM) にマップされるが、次のルールに従う必要がある。マネージ型のルールは次のようになる。

  • 01 (または 77) レベルで宣言する必要がある。
  • REDEFINES または RENAMES は不要。
  • 部分参照の対象であってはならない。
  • ADDRESS OF 句の対象であってはならない。
  • OCCURS 句の書き方 3 を使用して配列を宣言できる。

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 に解決される。

該当する型が存在しない場合、コンパイラは明示されなかった型を以下のリストの順序で解決しようとする。

  1. 上記の名前を持ち、かつネームスペースの指定されていない型が現在のコンパイルに 1 つしか含まれていない場合、コンパイラはこの型に解決する。
  2. 上記の名前を持ち、かつネームスペースの指定されていない型が参照先のアセンブリに 1 つしか含まれていない場合、コンパイラはこの型に解決する。
  3. 上記の名前を持ち、かつ現在の型と同じネームスペースを持つ型が現在のコンパイルに 1 つしか含まれていない場合、コンパイラはこの型に解決する。
  4. 上記の名前を持ち、かつ現在の型と同じネームスペースを持つ型が参照先のアセンブリに 1 つしか含まれていない場合、コンパイラはこの型に解決する。
  5. ILUSING 指令で指定されたネームスペースのうちに、上記の名前を持つ型が 1つしかない場合、コンパイラはこの型に解決する。
  6. ILUSING 指令で指定されたネームスペースのうちに、上記の型を含むネームスペースが複数ある場合、コンパイラはエラーを返す。

値型、参照型、およびボックス化

.NET COBOL では、次の型が区別されます。

  • 値型 (binary-long や .NET の System.DateTime など)。値型のデータ項目には実際の値が含まれます。たとえば、COBOL binary-long データ項目には 32 ビット整数が含まれます。
  • オブジェクト ヒープで割り当てられる参照型。参照型のデータ項目は、オブジェクト ヒープへの参照を保持する。参照型は、ガベージ コレクターの管理下にある。

すべての値型は、ボックス化と呼ばれるプロセスで参照型に変わることがある。たとえば、オブジェクト参照を、binary-long などの値型に設定できます。

ボックス化は、必要に応じて自動で行われます。たとえば、オブジェクトをパラメーターとして予測するメソッドに値型をパラメーターとして渡す場合などです。

明示的にボックス化するには、値型を汎用型 (.NET COBOL の System.Object や JVM COBOL の java.lang.Object など) に割り当てます。

値型のボックス化を解除して、元の値型を復元できます。

データ項目の定義で TYPE classname を指定すると、次のようになります。

  • classname が参照型を表す場合、参照型のオブジェクトを取得します。
  • classname が値型を表す場合、値型のオブジェクトを取得します。

ボックス化の際に、値がオブジェクト ヒープにコピーされ、参照がオブジェクト ヒープに戻されます。参照がアクティブではなくなった場合 (オブジェクト ヒープに対して保持するものがプログラム内にないため)、オブジェクト ヒープのスペースは、ガベージ コレクターで最終的に再取得されます。

次の場所にある ValueType のサンプルを参照してください。 Start > All Programs > Micro Focus Enterprise Developer > Samples > Visual COBOL SamplesCOBOL for .NET の場合。