

前回質問の続きです。
https://oshiete.goo.ne.jp/qa/9407682.html
下記Propertyプロシージャにおける、プロシージャ名、内部変数、引数の関係について説明頂きました。
Private p_Name As String
Private p_Age As Long
'Property Let ステートメント
Public Property Let Name(str As String)
p_Name = str
End Property
説明自体は分かりましたが、これ、そのまま引数付メソッドとして使えませんか?
プロパティ名はあくまで名前だけで、実際の処理内容は中身の p_Name = strなのだから、中身を変えれば何でも出来るのではないか?それってメソッドと同じでしょ?
例1
Public Property Let Name(str As String)
p_Name=str
msgbox p_Name
End Property
例2
Public Sub Name(str As String)
p_Name = str
End Sub
Property Let Name(str As String)
Sub Name(str As String)
両者の違いは何でしょうか?
No.2ベストアンサー
- 回答日時:
Classオブジェクトについては、
メソッドが、Sub プロシージャ/Function プロシージャで
プロパティが、Property
と考えると分かりやすいです。
そして、Propertyプロシージャは、戻り値を取得せずに実行だけするということができません。Sub は、戻り値を返さないメソッドで、Functionは、戻り値を返すメソッドです。
プロパティが性質はを表し、メソッドが動的な働きを見せるわけです。
そもそも、今回のスタイルのクラスのコードというのは、カプセル化(隠蔽化)のためのコードですから、ややこしい、しかし、その意味が今ひとつはっきりしてこないというご指摘は正しいと思います。VBAでは、簡易に用いることがあるので、この手の方法を実際には使うことは少ないと思うからです。実際、たかが、Excel VBAでも、本格的にClassをオブジェクト化してしまうと、ちょっとした修正さえ手の施しようがありません。
>Property Let Name(str As String)
>Sub Name(str As String)
>両者の違いは何でしょうか?
クラス・オブジェクトとしては、プロパティとメソッドということになりますね。
ただし、VBAでは、このようなコードに出会うことは、滅多にありません。また、以下のように、Public ステートメントをつけることも少ないです。元のコードに合わせてアレンジしてみました。
Excel VBAでの、Class は、ほとんどイベントの設定に使うものだからです。
'//
Class1
'----------------------
Private p_Name As String
Private p_Age As Long
'Property Let ステートメント
Public Property Let Name(myp_Name As String)
p_Name = myp_Name
End Property
Public Property Get Name() As String
'プロパティ
Name = p_Name
End Property
Public Sub NameChecker()
'半角の名前は不可とする メソッド
If LenB(StrConv(p_Name, vbFromUnicode)) = Len(p_Name) Then
Name = "err"
End If
End Sub
'-------------
'標準モジュール
Dim myClass As New Class1
Sub TestNameCheck()
With myClass
.Name = "WindFaller" ' "棚からぼたもち" '' 全角でないと通らない
.NameChecker .Name
Call TestOutcheck
End With
End Sub
Sub TestOutcheck()
MsgBox myClass.Name
End Sub
'画像は、プロパティとメソッドの違い

No.1
- 回答日時:
そのオブジェクトを使う側の記述方法が変わります。
プロパティ a.Name = str または str = a.Name
プロシージャ a.Name str1,str2,…
ファンクション str = a.Name(str1,str2,…)
プロパティ
・そのオブジェクトの属性(外からみれば見た目は内部変数)への代入や読み出しです。
プロシージャ(Sub)
・引数(str1,str2…)を一つではなく、無し、或いは二つ以上持つことができる。
ファンクション(Function)
・プロシージャに加え、何らかの処理結果を取得する。
イメージとしてプロパティは、オブジェクトの動作モードの設定
例:Application.ScreenUpdating = False
プロシージャ、ファンクションは引数を与えて、それを元になにか動作(処理)をさせるという感じですか。
例:MsgBox "こんにちは", vbInformation
rc = MsgBox("処理を行いますか?", vbYesNo)
ある意味、引数一つのプロシージャと、プロパティへの値の代入は、外からみれば機能的な見た目は似ていますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
Javaでブラウザ判定
-
servletからjspへオブジェクト...
-
ADOのOPENで実行時エラー
-
オブジェクトの参照渡しについて
-
VBスクリプトでテキストファイ...
-
WSH OpenTextFile クローズでき...
-
Excel VBA 定数にオブジェクト...
-
String型からlong型への変換は...
-
javaについての質問です
-
変数名の付け方
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
レコード件数の表示
-
「インスタンス」の意味をわか...
-
VB.NETでフォーム上にExcelのよ...
-
インスタンス参照でアクセスで...
-
final修飾子を使っているのに、...
-
クラス間でのデータ参照
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
servletからjspへオブジェクト...
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
VBAでの[]
-
System.Collections.SortedList
-
JSPでのArrayListの表示につい...
-
C#で親にイベントを投げる方法
-
C#のクラスで値渡しをする
-
VB.NETでのnothing の意義について
-
Vba ListViewの行挿入に関して...
-
String型からlong型への変換は...
-
javaで、、、
-
MessageBox.Show(Me,…の「Me」...
-
getParameter()について
-
ピクチャーボックスに点を打つ...
-
VB2005でADDとINSERTの違いは?
-
singletonクラスとは???
-
LiveConnectって?
おすすめ情報