|
> 事前に計算しておく方法も
> できればお教えいただけないでしょうか?
Private _Left, _Bottom, _Theta As Double
' まずはコンストラクタで計算
Public Sub New(ByVal left AS Double, ByVal bottom As Double, ...)
Me._Left = left
Me._Bottom = bottom
' ほかの処理があるかもしれないけど省略
Me.CalcTheta()
End Sub
Private Sub CalcTheta()
Me._Theta = Atan(Me._Left / Me._Bottom)
End Sub
' Leftとかを変更可能なら、そこのSetでも再計算
' ただし、Structureは基本的にプロパティはすべてReadOnlyにすべき
Public Property Left() As Double
Get
Return Me._Left
End Get
Set
Me._Left = Value
Me.CalcTheta()
End Set
End Property
' Thetaは計算済みの値を返すだけ
Public ReadOnly Property Theta() As Double
Get
Return Me._Theta
End Get
End Property
> Me.Left とMe.Bottomに両方、値が格納される前に
> Thetaを取得しようとするとNothingを返すようにしたいのですが、
> どうすれば良いですか?
VBだと、Nothingが何を意味するのかが曖昧です。
CDbl(Nothing)は0.0を意味し、0.0 = Nothing はTrueを返します。
(0.0 Is Nothingはコンパイルエラーになりますが)
このことから単に0.0を返せばいいのであれば、そのようにすればいいです。
一方、Is Nothing判定をできるようにしたいのであれば、Thetaの型として Doubleを使うことはできません。
代わりに Double? 型(Nullable(Of Double) の省略形)を使用することになるでしょう。
この場合、
Public ReadOnly Property Theta() As Double?
Get
' このIfはステートメントではなく演算子
Return If(Me.Left = 0 OrElse Me.Bottom = 0, Nothing, Atan(Me.Left / Me.Bottom))
End Get
End Property
|