質問: 8(文字列型)より チェック内容は数値であるか、有効範囲内の値であるか等 【A】 ・メンバ変数、パラメータは文字列型で宣言 ・プロパティ内で数値型へ変換その他チェックを全て行う ・クラス内外で計算に使用する際には都度、型変換して使用する メリット:チェック内容の記述が1箇所で済む。 デメリット:計算には都度型変換が必要、数の項目を文字列として格納するのに違和感(自分だけかも) 【B】 ・メンバ変数、パラメータは数値型で宣言する ・受け渡し前に数値として有効かだけをチェック(渡し時の型エラー予防) ・有効なら型変換してクラスへ格納、その他チェックをプロパティ内で行う メリット:計算にそのまま使用できる、項目と型で違和感がない。 デメリット:クラスへ渡す前に都度、型のチェックが入る。チェック項目がクラスの内、外に分かれる。 【C】 ・メンバ変数、パラメータは数値型で宣言する ・受け渡し前に全てのチェックを済ます ・クラスでは値を保持するだけ メリット:計算にそのまま使用できる、項目と型で違和感がない。 デメリット:同じチェックの記述がが点在する、クラスの恩恵が薄い。 ### 該当のソースコード ``` ここにご自身が実行したソースコードを書いてください ``` ### 試したこと 課題に対してアプローチしたことを記載してください ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: あくまで自分が実装するのであれば、ということで1つの案としてアドバイスさせていただきます。 まずクラス内でのメンバ変数の持ち方ですが、これは数値であるべき変数なら数値型で宣言します。 次にこのメンバ変数を参照するプロパティですが、Let/Getともに数値型で宣言します。 これは数値として扱われるべきプロパティが文字列型での受け渡しになるのは違和感があるからです。 最後に、テキストボックスへの入力値をプロパティにセットするために、もう1つLetを作成します。 文字列型を渡して、数値チェックをしながら数値型に変換するためのLetになります。 以下はチェックは行っていませんが簡単な例です。 クラスモジュール(Class1) ``` Private numX As Integer 'Xの格納用メンバ変数 'プロパティ:X Property Get X() As Integer X = numX End Property Property Let X(i As Integer) numX = i End Property '文字列型からの変換 Property Let strX(s As String) 'このサンプルでは数値チェックまではしていません numX = Val(s) End Property ``` 呼び出し側 ``` Sub Test Dim c As New Class1 '文字列で値をセット c.strX = "123" '数値で値を参照・代入 c.X = c.X * 2 Msgbox c.X '246が表示されます。 End Sub ```