假设我有一个名为Vc的类,它代表几何向量AB。 我们可以通过两个点(xA,yA,xB,yB)或一个点,一个距离和一个角度(xA,yA,Len,Angle)定义一个Vector。
我想编写类Vc,使其属性可以是可选的(以适应上述两种定义方法)并自动执行“填充缺少的可选项”所需的计算 data“:即用户是否写入xA,yA,xB,yB属性 缺失的属性Len和Angle由代码自动计算, 反之亦然。
现在简单地编码,我将处理类似的问题,而不是 几何问题:
假设我有两个数字NbA和NbB,NbA = 2 NbB,用户可以输入NbA或NbB,
我尝试了这段代码,希望至少NbB由NbA计算 (或由用户输入)
Private pNbA As Double
Private pNbB As Double
Public Property Get NbA() As Double
NbA = pNbA
End Property
Public Property Let NbA(value As Double)
pNbA = value
End Property
Public Property Get NbB() As Double
NbB = pNbB
End Property
Public Property Let NbB(NbA As Double)
pNbB = NbA * 2
End Property
但是在测试时我得到NbB = 0(而nbA = 1):
Sub TestAbove()
Dim aTest As TestClass
Set aTest = New TestClass
aTest.nbA = 1
MsgBox aTest.nbB 'this gives 0
End Sub
我希望我可以在属性中解决这个问题 本课程的一部分,不需要写很多东西 引入重复定义的方法, 我很害怕。
答案 0 :(得分:0)
在VB.NET中,您将使用Nullable(Of Double)
在VBA中,出于同样的目的,您可以使用Variant/Empty
:
Private pNbA As Variant ' Empty by default
Public Property Get NbA() As Double
if IsEmpty(pNbA) then NbA = 2 * NbB else NbA = pNbA
End Property
Public Property Let NbA(value As Double)
pNbA = value
End Property
但是我相信如果你以一种只返回存储值并且不依赖于彼此的方式定义类属性会更好,并且在模块中创建几个构造函数来接受你的不同参数集并初始化该类的所有字段都正确,就好像所有属性都已提供一样。