質問

定数を持つ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を使用して(おそらく '名前空間'名の部分)はより良い回避策です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top