属性

属性は、プログラム内の要素に関する追加情報を提供する場合に使用されます。

attribute-clause

constructor-parameters property-name = property-value

*> クラスで属性を定義する
class-id MyClass
          attribute WebService(name Description = "My service")
          attribute Obsolete.

*> フィールドで属性を定義する
01 a binary-long attribute XmlAttribute("UpperB")
          attribute Obsolete static.

*> フィールドで属性を定義する
*> この場合、属性の後に
*> 予約語 PROPERTY が必要であることに注意する
01 b binary-long property
          attribute XmlAttribute("UpperB")
          attribute Obsolete static.

*> イベントで属性を定義する
*> 属性の後に
*> 予約語 EVENT が必要であることに注意する
01 d type fred event
          attribute Obsolete static.

*> メソッドで属性を定義する
method-id main 
          attribute Obsolete static.
procedure division
    move 999 to a
    display a

end method.

*> メソッド・パラメータで属性を定義してタイプを戻す
method-id stat static.
procedure division 
          using by value l1 as binary-long
                   attribute CLSCompliant(true)
                   attribute MarshalAs(3)
          returning l2 as binary-long
                   attribute CLSCompliant(true)
                   attribute MarshalAs(2).
    move 999 to a
    display a
    set d to null
end method.

*> プロパティで属性を定義する
method-id set property prop 
          attribute Obsolete static.
procedure division using by value l1 as binary-long.
    move l1 to a
end method.

end class.

*> デリゲートで属性を定義する
delegate-id fred attribute Obsolete.
procedure division using by value l1 as binary-long.
end delegate.   

属性を指定するには

属性は、次の内容を使用して指定できます。

constructor parameters
該当属性のコンストラクタのパラメータを指定します。属性の指定で使用されるコンストラクタ・パラメータは、属性で定義されるコンストラクタと一致する必要があります。次の例では、コンストラクタは文字列タイプの単一パラメータを予測します。
 01 a binary-long attribute xml("UpperB").
NAME property-name = property-value
指名されるパラメータです。属性クラスで定義されるプロパティに相当します。指名されたパラメータは、属性で定義されるプロパティと一致する必要があります。次の例では、Description は、属性クラス WebService に定義される文字列タイプのプロパティです。
attribute WebService(NAME Description="My service")

属性について

属性 (カスタム属性とも呼ばれる) は、プログラム内の要素に関する追加情報を提供する場合に使用されます。属性を使用して、メソッド、データ項目、プロパティ、イベント、デリゲート、メソッド・パラメータ、アセンブリ、クラス、メソッド戻り値を記述することができます。

COBOL プログラムで使用される構文の多くは、メソッドやフィールドの可視性 (PUBLIC、PRIVATE、PROTECTED など) といったプログラム要素を記述します。これらの記述はすべて、コンパイラから出力される dll または exe ファイルにメタデータとして埋め込まれ、リフレクションを使用して他のプログラムから問い合わせを行うことができます。属性は、無期限かつ無制限に追加のメタデータをプログラム要素に追加する方法です。

指定された属性は、エントリの主体を記述するメタデータの一部になり、リフレクタで表示できます。