从不同的班级使用我的Enum值的正确方法是什么?
addClass
它说<< ' VAL_LIST'没有宣布。由于其保护级别,它可能无法访问。'没有宣布。由于其保护级别,它可能无法访问。 >>
答案 0 :(得分:4)
您需要为枚举提供访问修饰符。默认情况下(如果没有关闭),它是私有的。
Public Class AnotherClass
'NOTE enum now has an access modifier.
Public Enum VAL_LIST
VAL_1
VAL_2
VAL_3
End Enum
'...
End Class
注意:您应始终使用访问修饰符以避免混淆并减少错误。
附加说明:虽然这个主题多余,但我建议您阅读正确的命名约定,特别是 - 在您的情况下 - with regard to enums。您应该使用Pascal Case为您的枚举及其值命名,例如ValList
。此外,我会选择更具描述性的名称。 VAL_LIST
并没有真正表明它的用途,当然VAL_1
等也没有说明它们的用途。
答案 1 :(得分:3)
类中有一个默认的对象范围,它与类本身的范围无关。
默认情况下,Structures
和Enums
为Private
,变量为Public
。
最佳做法是明确指定Public
/ Private
范围,以便您可以执行以下操作:
Public Class AnotherClass
Public Enum VAL_LIST
VAL_1
VAL_2
VAL_3
End Enum
End Class
您现在必须通过类名称
引用EnumAnotherClass.VAL_LIST.VAL_1
虽然在您的示例中WriteSomething
是实例成员,但您需要执行以下操作:
Dim ac As New AnotherClass
ac.WriteSomething(AnotherClass.VAL_LIST.VAL_1, DateTime.Now.ToString)
另外,请将您的枚举重命名为更有意义的内容,不要使用下划线来遵循最佳做法。
完整的工作示例:
Public Class MainClass
Private Sub Foo()
Dim ac As New AnotherClass
ac.WriteSomething(AnotherClass.ValueList.Value1, DateTime.Now.ToString)
End Sub
End Class
Public Class AnotherClass
Public Enum ValueList
Value1
Value2
Value3
End Enum
Public Sub WriteSomething(ByVal myVal As ValueList, ByVal myString As String)
Dim _string As String = "Today is " & myString
End Sub
End Class