我想要一个常量材料的目录,这样我就可以使用如下所示的代码:
Dim MyDensity, MySymbol
MyDensity = ALUMINUM.Density
MySymbol = ALUMINUM.Symbol
显然,铝的密度和符号预计不会改变,所以我希望它们是常数,但为了简单起见,我喜欢点符号。
我看到了一些选项,但我不喜欢它们。
-
为每种材料的每个属性设置常量。这看起来常数太多了,因为我可能有 20 种材质,每种材质都有 5 个属性。
Const ALUMINUM_DENSITY As Float = 169.34
Const ALUMINUM_SYMBOL As String = "AL"
-
定义一个包含所有材料的枚举,并创建返回属性的函数。密度是常数并不那么明显,因为它的值是由函数返回的。
Public Enum Material
MAT_ALUMINUM
MAT_COPPER
End Enum
Public Function GetDensity(Mat As Material)
Select Case Mat
Case MAT_ALUMINUM
GetDensity = 164.34
End Select
End Function
Const Structs 或 Const Objects 似乎无法解决这个问题,但也许我错了(它们甚至可能不被允许)。有没有更好的办法?
使 VBA 相当于“静态类”。常规模块可以具有属性,并且没有任何内容表明它们不能是只读的。我还将密度和符号包装在一种类型中:
'Materials.bas
Public Type Material
Density As Double
Symbol As String
End Type
Public Property Get Aluminum() As Material
Dim output As Material
output.Density = 169.34
output.Symbol = "AL"
Aluminum = output
End Property
Public Property Get Iron() As Material
'... etc
End Property
这非常接近您想要的使用语义:
Private Sub Example()
Debug.Print Materials.Aluminum.Density
Debug.Print Materials.Aluminum.Symbol
End Sub
如果您在同一个项目中,您甚至可以删除显式的Materials
限定符(尽管我建议将其明确化):
Private Sub Example()
Debug.Print Aluminum.Density
Debug.Print Aluminum.Symbol
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)