質問
定数を持つVBスクリプトクラスを作成しようとしましたが、800A03EAエラーが発生しました。それはそれがVBSのバグですか?OOPの基本的な規則ではありませんか?
Class customer
' comment it const and its works
const MAX_LEN=70
Private Name
Private Sub Class_Initialize
Name = ""
End Sub
' name property.
Public Property Get getName
getName = Name
End Property
Public Property Let letName(p_name)
Name = p_name
End Property
end class
. 解決
ドキュメントクラスのコンテキストで許可されているすべてのステートメントを一覧表示します。Const
はそれらの中ではないので、サポートされていません。インスタンス化中に初期化したプライベートメンバ変数を使用して問題を回避できます(Class_Initialize
):
Class customer
Private MAX_LEN
Private Name
Private Sub Class_Initialize
MAX_LEN = 70
Name = ""
End Sub
...
End Class
.
クラスのインスタンスがこの値を公開する場合は、読み取り専用プロパティとして実装できます。
Class customer
Private MAX_LEN
Private Sub Class_Initialize
MAX_LEN = 70
End Sub
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = MAX_LEN
End Property
...
End Class
.
しかし、 EKKEHARD.HORNER を指摘した場合、その値は依然としてオブジェクト内部コードによって変更される可能性があります。不変性がこの値の主要な要件である場合は、グローバル定数として実装する必要があります。
他のヒント
私は Ansgar Wiechers 答え、しかし別のオプションを提案したいのですが。
不変性がパフォーマンスより重要な場合は、クラスレベル変数の代わりに値を参照するためにそのプロパティをGETを直接入力して使用することができます。
Class customer
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = 70
End Property
...
End Class
. プライベート変数(おそらくゲッター付き)は、クラスの外部から読み取り専用の値を与えますが、クラス内部コードはその値を変更できます。
SO Constnessが最も重要である場合には、グローバルconstを使用して(おそらく '名前空間'名の部分)はより良い回避策です。
所属していません StackOverflow