フィールド

クラス、値型、インターフェイスは、静的フィールドやインスタンス フィールドのセットを定義できます。

static-or-instance-field

variable-field constant-field

variable-field

type-specifier access-modifier attribute-clause

constant-field

type-specifier access-modifier attribute-clause

    01 dAmount  decimal.
    01 asNames string occurs 5.
    01 abFigures binary-long occurs any.
     
    78 Max_Students value 25.  *> default is public, binary-long

コアのサンプルも参照してください。このサンプルは、 Start > All Programs > Micro Focus Visual COBOL > Samples , under COBOL for JVM (Windows) or $COBDIR/demo (UNIX). の下にあります。

INITIALIZE ONLY のキーワード

INITIALIZE ONLY 句は、静的フィールドやインスタンス フィールドを定義し、それぞれ静的コンストラクターまたはインスタンス コンストラクター内でのみ変更できます。次に例を示します。

    class-id a.
    01 s string static value "Shouldn't see this" initialize only.
    method-id main static.
        display s
    end method.
    method-id new static.
        set s to "Hello world"
    end method.
    end class.

INITIALIZE ONLY フィールドと定数フィールドは、次のように異なります。

INITIALIZE ONLY フィールド:
  • インスタンスレベルまたは静的になります。
  • ランタイムで評価されます。
  • 宣言内またはコンストラクターのコードで初期化できます。
定数フィールド (78 レベル):
  • 常に暗黙的に静的になります。
  • コンパイル時に評価されます。
  • 宣言でのみ初期化されます。

CONSTANT キーワード

CONSTANT キーワードを使用して、01 レベル フィールドを定数として宣言します。

VALUE 句は、このクラスまたは別のクラス内で定義されたリテラル値または定数である必要があります。

数値フィールドの場合、VALUE 句は、算術式にすることができます。算術式は、かっこを含むことができ、算術式の通常の規則および型に応じて評価されるため、切り詰めが発生することがあります。

文字列フィールドの場合、VALUE 句は、文字列定数または定数のみを含む文字列連結式にすることができます。

EVENT キーワード

EVENT キーワードは、デリゲートとして宣言される項目でのみ許可されます。このキーワードにより、STATIC キーワードの有無に応じて静的またはインスタンスとなるイベントの生成が発生します。

イベントの基になるデリゲート型と互換性のあるメソッド、デリゲート、および匿名メソッドは、ATTACH 動詞を使用してイベントに接続することができ、その後で DETACH 動詞を使用してデタッチすることができます。次に例を示します。

class-id MyList using I.
working-storage section.
01 ChangeEvent type ChangeDelegate event public.
…
end class
class-id a.
 
method-id main static.
 declare names as type MyList[string] = new MyList[string]
 attach method ListChanged1 to names::ChangeEvent
 …

次の句を使用して、イベントの特性を変更します。

FOR 句

FOR 句は明示的なインターフェイスの実装として使用します。これは、包含クラスが 2 つの異なるインターフェイスを実装しており、これら 2 つのインターフェイスに同じ名前と型を持つプロパティがある場合に特に役立ちます。この場合、FOR 句を使用すると、2 つの異なるインターフェイス用にイベントの 2 つの異なる実装を提供できます。

01 ChangeEvent type ChangeDelegate EVENT FOR MyInterface1. 
01 ChangeEvent type ChangeDelegate EVENT FOR MyInterface2.

FINAL 句

FINAL 句を使用して、イベントを非仮想にして、派生クラスでオーバーライドできないようにします。

01 ChangeEvent type ChangeDelegate EVENT FINAL.

OVERRIDE 句

OVERRIDE 句を使用して、継承クラスでこの名前と型のイベントをオーバーライドします。継承クラスの仮想イベントのみをこの方法でオーバーライドできます。OVERRIDE 句と REDEFINE 句は相互に排他的です。

 01 ChangeEvent type ChangeDelegate EVENT OVERRIDE.

REDEFINE 句

REDEFINE 句を使用して、継承クラスでこの名前と型のイベントを再定義します。継承クラスの仮想イベントと非仮想イベントをこの方法で再定義できます。OVERRIDE 句と REDEFINE 句は相互に排他的です。

01 ChangeEvent type ChangeDelegate EVENT REDEFINE.

PROPERTY キーワード

PROPERTY キーワードを使用してフィールドをプロパティとして公開できます。デフォルトでは、プロパティ名はフィールド名と同じ (大文字と小文字も一致) になります。AS 句を使用して、別の外部名を指定できます。

01 public-field pic x property as "Property1".

PROPERTY キーワードは、フィールドを取得して更新する 2 つのアクセス用メソッドを生成します。これらのメソッドの名前は、プロパティ名の前に 'get_' および 'set_' (.NET) または 'get' および 'set' (JVM) を付けて生成されます。これらのメソッドは、一般的に getter メソッドおよび setter メソッドと呼ばれます。プロパティをサポートする言語は、これらのメソッドを非表示にして、これらのメンバー フィールドを直接取得および設定できるように表示されます。実際に、コンパイラは、プロパティ名を関連する getter または setter に置き換えます。

このように定義されたプロパティはデフォルトでは仮想となるため、派生クラスでオーバーライドすることはできません。

次の句を使用して、プロパティの特性を変更します。

FOR 句

FOR 句は明示的なインターフェイスの実装として使用します。これは、包含クラスが 2 つの異なるインターフェイスを実装しており、これら 2 つのインターフェイスに同じ名前と型を持つプロパティがある場合に特に役立ちます。この場合、FOR 句を使用すると、2 つの異なるインターフェイス用にプロパティの 2 つの異なる実装を提供できます。

01 public-field2 pic x property as "Property1" FOR MyInterface1.
01 public-field2 pic x property as "Property1" FOR MyInterface2.

FINAL 句

FINAL 句を使用して、プロパティを非仮想にして、派生クラスでオーバーライドできないようにします。

 01 public-field pic x property as "Property1" FINAL.

OVERRIDE 句

OVERRIDE 句を使用して、継承クラスでこの名前と型のプロパティをオーバーライドします。継承クラスの仮想プロパティのみをこの方法でオーバーライドできます。OVERRIDE 句と REDEFINE 句は相互に排他的です。

 01 public-field pic x property as "Property1" OVERRIDE.

REDEFINE 句

REDEFINE 句を使用して、継承クラスでこの名前と型のプロパティを再定義します。継承クラスの仮想プロパティと非仮想プロパティをこの方法で再定義できます。OVERRIDE 句と REDEFINE 句は相互に排他的です。

01 public-field pic x property as "Property1" REDEFINE.

例:

以下のプログラムからの出力は次のようになります。

P1 in b

P2 in a

P3 in a

M1 in b

M2 in a

M3 in a

class-id myTesterClass.
method-id main static.
   01 a type a value new b.

   display a::P1
   display a::P2
   display a::P3
   invoke a::M1
   invoke a::M2
   invoke a::M3
end method.
end class.

class-id a.

01 P1 string property value "P1 in a".
01 P2 string property value "P2 in a".
01 P3 string property final value "P3 in a".

method-id M1.
   display "M1 in a".
end method.

method-id M2.
   display "M2 in a".
end method.

method-id M3 final.
   display "M3 in a".
end method.

end class.

class-id b inherits type a.

01 P1 string property override value "P1 in b".
01 P2 string property redefine value "P2 in b".
01 P3 string property redefine value "P3 in b".

method-id M1 override.
   display "M1 in b".
end method.

method-id M2 redefine.
   display "M2 in b".
end method.

method-id M3 redefine.
   display "M3 in b".
end method.
end class.

プロパティのサンプルも参照してください。このサンプルは、 Start > All Programs > Micro Focus Visual COBOL > Samples , under COBOL for JVM (Windows) or $COBDIR/demo (UNIX). の下にあります。