属性集重载数组与非数组

时间:2010-02-11 20:15:33

标签: .net vb.net properties set overloading

我正在尝试创建一个允许根据各种输入设置姓氏的属性。调用它的代码是解析名称字段。在某些情况下,它将具有单个姓氏,在其他情况下,它将具有需要连接的姓氏数组。我想将连接代码保存在一个地方,以便于维护。

这是我的代码,当然不起作用:

        Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
        End Set
    End Property

    Public WriteOnly Property LastName() As String()
        Set(ByVal value As String())
            For Each word As String In value
                _LastName &= word & " "
            Next

            _LastName = _LastName.Trim
        End Set
    End Property

我已经尝试了很多变种,甚至将多个Set放在同一个属性中,但似乎没有任何效果。必须有一些方法来接受数组和单个实例值。编译器清楚地知道传入的对象是否是一个数组。

我尝试使用String()类型的属性,但后来我不能返回一个String。我能想到的唯一解决方案是不同的命名属性,这使得使用类更难,或者一大堆子和函数相互重载。

建议?

克里斯

3 个答案:

答案 0 :(得分:2)

您不能重载属性,因此该属性可以是stringstring(),而不是两者。

考虑为string()属性设置不同的名称:

Public WriteOnly Property LastNameArray() As String()
    Set(ByVal value As String())
        For Each word As String In value
            _LastName &= word & " "
        Next

        _LastName = _LastName.Trim
    End Set
End Property

答案 1 :(得分:0)

如果您的输出与输入的输出类型不同,则不能使用属性。使用函数没有任何问题,好的做法是说你有函数名称(LastName),并在它前面添加一个动词(Get),所以你最终得到一个函数anme,如GetLastName

Public  Function GetLastName(ByVal names As String()) As String

(如果有明显错误的话,请原谅我生锈的VB)

答案 2 :(得分:0)

这样的事情:

        Public Property LastName() As Object
        Get
            Return _LastName
        End Get
        Set(ByVal value As Object)
            If TypeOf (value) Is Array Then
                For Each word As String In value
                    _LastName &= word & " "
                Next

                _LastName = _LastName.Trim

            End If
            If TypeOf (value) Is String Then
                _LastName = value
            End If
        End Set
    End Property

是否有人发现此问题?