次の方法で共有


<property> 要素

プロパティを宣言します。

<property name="propertyName" [internalName="propertyVariable"] />

または

<property name="propertyName">
   <get [internalName="getFunctionName"] />
   <put [internalName="putFunctionName"] />
</property>

  • propertyName
    公開するプロパティの名前を指定します。internalName 属性を指定しない場合は、プロパティの値を保持するために使用されるグローバル変数の名前と同じ名前にする必要があります。

  • propertyVariable
    省略可能です。スクリプトレット ファイルの <script> 要素に含まれるグローバル変数の名前を指定します。この変数は、propertyName の値を保持します。internalName 属性を指定しない場合、プロパティの値は propertyName と同じ名前の変数になります。internalName 属性を指定すると、プロパティの名前とは異なる名前を、そのプロパティに対応するグローバル変数に使用できます。

  • getFunctionName
    省略可能です。プロパティの値を読み取るために使用するプロシージャの名前を指定します。<get> 要素を指定して <put> 要素を指定しない場合、プロパティは読み取り専用になります。<get> 要素を指定して internalName 属性を指定しない場合、プロパティの値を読み取るメソッドには、プロパティの名前の前に get_ を付けた名前を指定する必要があります。たとえば、get_lastname と指定します。

  • putFunctionName
    省略可能です。プロパティの値を書き込むために使用するプロシージャの名前を指定します。<put> 要素を指定して <get> 要素を指定しない場合、プロパティは書き込み専用になります。<put> 要素を指定して internalName 属性を指定しない場合、プロパティの値を読み取るメソッドには、プロパティの名前の前に put_ を付けた名前を指定する必要があります。たとえば、put_lastname と指定します。

    **ヒント   **XML の場合、要素を /> で閉じると、<property> 要素のように中身がない要素を実装できます。

解説

プロパティは、単純な値として公開できます。この場合のプロパティは、スクリプト コンポーネント ファイル内でグローバル変数として扱われます。

プロシージャ (関数またはサブルーチン) としてプロパティを実装することもできます。これにより、プロパティの値を計算したり、プロパティを読み取り専用、書き込み専用、読み書き可能のいずれかに制御したりできます。この方法では、プロパティは別の <script> 要素のプロシージャ (関数またはサブルーチン) として実装されます。<property> 要素は、プロパティの名前とそのプロパティを実装するためのプロシージャを対応付けます。プロシージャの名前は、<property> 要素で指定した内部名と一致する必要があります。

putFunctionName は、呼び出されると、プロパティを設定する値が格納された引数を 1 つ受け取ります。

上記の標準的な構文のほかに簡単な表記法も使用できます。この表記法を使用すれば、子タグを使って情報を追加する必要はありません。たとえば、プロパティと同じ名前の "get" および "put" アクセサでプロパティを宣言する場合は、以下の構文を使用することができます。

<property name="myproperty" get put/>

機能的には以下と同じです。

<property name="myproperty">
   <get/>
   <put/>
</property>

既定値とは異なる名前をアクセサに対して明示的に指定するには、以下の構文を使用できます。

<property name="myproperty" get="testget" put="testput"/>

既定のプロパティを指定するには、要素の中に dispid="0" と指定します。詳細については、「プロパティの公開」を参照してください。

次のコードは、4 つのプロパティ (sname、age、dateOfBirth、mstatus) を定義する例です。sname プロパティは、単純な値です。age プロパティは読み取り専用で、関数 readAge を使って実装されます。dateOfBirth プロパティは読み書き可能で、readDOB と writeDOB を使って実装されます。最後に、mstatus プロパティは、既定の関数である get_mstatus と put_mstatus を使って実装されます。

メモ   <script> 要素内のスクリプトを隠蔽するには、CDATA セクションが必要です。詳細については、「スクリプト コンポーネント ファイルと XML 適合性」を参照してください。

<public>
   <property name="sname"/>
   <property name="age">
      <get internalName="readAge"/>
   </property>
   <property name="dateOfBirth">
      <get internalName="readDOB"/>
      <put internalName="writeDOB"/>
   </property>
   <property name="mstatus">
      <get/>
      <put/>
   </property>
</public>

<script language="VBScript">
<![CDATA[
Dim sname   ' 読み書き可能な sname プロパティ (関数なし)。
Dim gDOB   ' 誕生日を格納するグローバル変数。
Dim gMStatus   ' 結婚歴を格納するグローバル変数。

Function readDOB()
   ' dateOfBirth プロパティの値を取得します。
   readDOB = gDOB
End Function

Function writeDOB(newDOB)
   ' dateOfBirth プロパティの値を設定します。
   If isDate(gDOB) Then
      ' エラーを確認します。
      gDOB = newDOB
   End If
End Function

Function readAge()
   ' 読み取り専用の age プロパティを計算します。
   If isDate(gDOB) Then
      dobM = DatePart("m", gDOB)
      dobD = DatePart("d", gDOB)
      dobY = DatePart("yyyy", gDOB)
      todayY = DatePart("yyyy", Date)
      age = todayY - dobY

      ' 今年の誕生日が過ぎていない場合は調整します。
      bday = DateValue(dobM & "/" & dobD & "/" & todayY)
      If DateDiff("d", bday, DateValue(Date)) < 0 Then
         age = age - 1
      End If
      readAge = age
   End If
End Function

Function get_mstatus()
   ' Reads value of mstatus property.
   get_mstatus = gMStatus
End Function

Function put_mstatus(s)
   ' mstatus プロパティの値を書き込みます。
   If s = "M" Or s = "S" Then
      gMStatus = s
   Else
      gMStatus = "?"
   End If
End Function
]]>
</script>

参照

<event> 要素 | <method> 要素 | イベントの公開 | メソッドの公開 | プロパティの公開