是否可以在VB.NET中创建一个可以与switch语句中的字符串进行比较的类?例如,假设我有一个Foo类:
Public Class Foo
Public Bar As String = "test"
End Class
是否可以实现某些接口或覆盖某些相等运算符,以便我可以像这样使用Foo?
Dim foo As New Foo()
Select Case "test"
Case foo
' It worked!
End Select
答案 0 :(得分:4)
是的,您可以在.NET语言中定义隐式conversion operators,允许编译器将您的类的实例隐式转换为另一种类型。
在VB.NET中,这被称为"扩展"运营商。你可以这样定义:
Public Class Foo
Public Bar As String = "test"
Public Shared Widening Operator CType(ByVal f As Foo) As String
Return f.Bar
End Operator
End Class
还有显式转换,称为"缩小" VB.NET中的运算符。就像听起来一样,前一次转换可以自动发生,而后者则要求您明确指示编译器执行转换。这可以防止一些令人讨厌的意外,但也会使代码混乱。
答案 1 :(得分:0)
我认为,根据您的问题,您希望查看给定类实例中的Bar是否等于test。
如果是这样,您可以利用ToString()覆盖:
Public Class Foo
Public Bar As String = "test"
Public Overrides Function ToString() As String
Return Bar
End Function
End Class
然后您的案例陈述变为:
Dim foo As New Foo()
Select Case "test"
Case foo.ToString
' It worked!
End Select
您也可以实现默认属性,但这不是很干净,因为默认属性需要有参数。
Public Class Foo
Public Bar As String = "test"
Default Public ReadOnly Property DefaultProp(JustUseZero As Integer) As String
Get
Return Bar
End Get
End Property
End Class
然后将被称为:
Dim foo As New Foo()
Select Case "test"
Case foo(0)
' It worked!
End Select