トップ回答者
プロパティとメゾットの違いについて

質問
-
プロパティとメゾットの違いを勘違いして自作のクラスを作っていた事に気が付いたのが一昨日なのですが、そこで質問があります。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sample As New BMI
sample.Shintyou = CDbl(Me.TextBox1.Text)
sample.Taijyuu = CDbl(Me.TextBox2.Text)Me.Label1.Text = sample.BMI1
Me.Label2.Text = sample.BMI2End Sub
Class BMI
Private _Shintyou As Double
Private _Taijyuu As DoublePublic Sub New()
_Shintyou = 0
_Taijyuu = 0
End SubPublic Property Shintyou() As Double
Get
Return _Shintyou
End Get
Set(ByVal value As Double)
_Shintyou = value
End Set
End PropertyPublic Property Taijyuu() As Double
Get
Return _Taijyuu
End Get
Set(ByVal value As Double)
_Taijyuu = value
End Set
End PropertyPublic ReadOnly Property BMI1() As Double
Get
Return _Taijyuu - _Shintyou ^ 2
End Get
End PropertyPublic Function BMI2() As Double
Return _Taijyuu - _Shintyou ^ 2
End FunctionEnd Class
例えば、こんなクラス(とフォーム)を作ってしまったとします。BMI1とBMI2の戻り値は同じになります。今まではBMI1の方のやり方で作っていたのですが、たまたま引数が必要な戻り値が必要になり、調べている内にBMI2のやり方が本来のやり方の様な気がしてきました。
メゾットというと何らかの動作を伴うものと思っていたので、関数のような使い方をクラスでやる場合はReadOnly Propertyでやるのかな、と勘違いしていた(と思う)わけです。
が、引数がない場合はどっちも同じ気がするのですが、ReadOnly Propertyにする方法と、Functionにする方法はどちらが正しいのでしょうか?
回答
-
通常は「メソッド」と記述すると思います。
で、プロパティとメソッドのどちらを使うかですが、どちらが正しいという話ではなく、クラスを設計する人がどのように使ってほしいかによって適切に選択するものだと思います。
自分だったら、Personというクラスを作り、そのインスタンスに身長、体重は必ず設定するという状態であれば、BMIというプロパティを用意してそこから値を取り出せるようにするでしょうね。
それとは別に、BMIUtilityというようなクラスを作ってBMIの計算式をそこに格納しておきたいのであれば、そのときは静的メソッドとしてBMICalculateというメソッドを定義して身長、体重を引数として取るようにするかもしれません。
このあたりはどういったクラスを設計していくかによってどちらを使うべきか変わってくるものだと思います。
すべての返信
-
通常は「メソッド」と記述すると思います。
で、プロパティとメソッドのどちらを使うかですが、どちらが正しいという話ではなく、クラスを設計する人がどのように使ってほしいかによって適切に選択するものだと思います。
自分だったら、Personというクラスを作り、そのインスタンスに身長、体重は必ず設定するという状態であれば、BMIというプロパティを用意してそこから値を取り出せるようにするでしょうね。
それとは別に、BMIUtilityというようなクラスを作ってBMIの計算式をそこに格納しておきたいのであれば、そのときは静的メソッドとしてBMICalculateというメソッドを定義して身長、体重を引数として取るようにするかもしれません。
このあたりはどういったクラスを設計していくかによってどちらを使うべきか変わってくるものだと思います。 -
すいません、自己レスで申し訳ないのですが、
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard47.htm
ここに考え方が載っていました。要は、プロパティでもメゾットでもどっちでも出来る、らしいですね。
まだきちんと読み切っていませんが、プロパティは状態を、メゾットは動作を表す感じっぽいことが判りました。
だとすると、先の件はプロパティにするのがすんなり解釈できそうなので、プロパティのままで良さそうな気がしてきました。