<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> 要素 | イベントの公開 | メソッドの公開 | プロパティの公開