创建一个可以与switch语句中的字符串进行比较的类

时间:2012-01-13 01:09:41

标签: vb.net

是否可以在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

2 个答案:

答案 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