クラスの勉強中です。
http://excelwork.info/excel/classpropertylet/
上記URLの記述において、
Private p_Name As String
Private p_Age As Long
'Property Let ステートメント
Public Property Let Name(str As String)
p_Name = str
End Property
確認のために、Nameがプロパティの名前で、strはただの変数、ですよね?
p_Nameこれは何ですか?strを経由してここに代入される値が実際のプロパティの値になるようですが「p_NameがNameプロパティの実際の値を示す」と、どうやって分かるのですか?単に代入文の左辺にあるから?1個のLetステートメントには1個の変数しか左辺に置けないルールになってるのでしょうか?また、なんでName=strと表現しないのですか?ややこしいだけに見えます。
No.1ベストアンサー
- 回答日時:
> p_Nameこれは何ですか?
> なんでName=strと表現しないのですか?
それは、クラスの内部変数(ご質問でのp_Name)が、必ずしもプロパティを介してクラス外部とやり取りする値(ご質問でのstr)と一致しないからです。
内部変数に代入する前に、Letプロパティで与えられた値が適切なものかチェックし、適切でないならデフォルト値を代入するような処理をしたりすることもあります。
また、普通はプロパティの名前や値はクラスを使用する人が、それがどの様なものか想像しやすい名前や形式をとるようにします。
でも内部変数はクラスの設計者が扱い易い形式で保存させます。その為の変換処理を行うのがPropertyで記述される処理です。
> 単に代入文の左辺にあるから?1個のLetステートメントには1個の変数しか左辺に置けないルールになってるのでしょうか?
例えば、プロパティ名は姓名であっても、クラス設計者がクラス内部では姓と名を分けて保持したければその様にすれば良いし、一つで管理したければそう管理すれば良いのです。
以下、クラス内部では西暦で保持していますが、Heiseiプロパティを使用すれば、平成の年号でやりとりができます。
-----------------------
Sub sample()
Dim a As Object
Set a = New Nengou
MsgBox a.Heisei ' 28と表示
a.Seireki = 2020
MsgBox a.Heisei ' 32と表示
End Sub
----Nenngou-----
Private p_year As Long
Private Sub Class_Initialize()
p_year = Year(Now)
End Sub
Property Let Seireki(y As Long)
If y >= 1 Then
p_year = y
Else
p_year = 1
End If
End Property
Property Get Seireki() As Long
Seireki = p_year
End Property
Property Let Heisei(y As Long)
If y >= 1 Then
p_year = y + 1988
Else
p_year = 1
End If
End Property
Property Get Heisei() As Long
Heisei = p_year - 1988
End Property
-----
ありがとうございます。
プロパティ名、内部変数、外部とやり取りする変数の違いが理解出来てませんでした。クラスで実際に扱うのは内部変数で、使う側から見えるclass.Nameはあくまでプロパティ名だったのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「天声人語」をインターネット...
-
配列の重複する値とその個数を...
-
1 つのヘッダファイルに複数の...
-
同じクラスにならない確率を教...
-
どこからも呼ばれていない無意...
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
ATLとMFCの違いは何でしょうか?
-
eclipseのパッケージって何?
-
packageとimport の違いって?
-
ネスカフェ エクセラ と UCCク...
-
クラスのプロパティに構造体を...
-
Applet、Panelのクラス体系につ...
-
自作のクラスファイルがインポ...
-
共通で使う関数を集めたクラス...
-
クラスにアクセスできません。
-
クラス修飾子やアクセス修飾子...
-
IPアドレスのクラスAを取得して...
-
私はクラスLINEにまだ入れてな...
-
重複エラーを解決するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
配列の重複する値とその個数を...
-
自分事ですが、私のLINEのスク...
-
java eclipse 型に解決できません
-
同じクラスにならない確率を教...
-
どこからも呼ばれていない無意...
-
グローバルIPとプライベートIP...
-
担任にプレゼント
-
数学の計算問題。 3年間同じク...
-
クラスのプロパティに構造体を...
-
河合塾のクラス分けについて
-
IPアドレスのクラスAを取得して...
-
共通で使う関数を集めたクラス...
-
自作のクラスファイルがインポ...
-
1 つのヘッダファイルに複数の...
-
ヒートテックやファイバーヒー...
-
dllと同じプロジェクトにする方法
-
main()を持つクラスが2つ以上...
-
同一パッケージにあるクラスが...
おすすめ情報