我正在尝试创建一个允许根据各种输入设置姓氏的属性。调用它的代码是解析名称字段。在某些情况下,它将具有单个姓氏,在其他情况下,它将具有需要连接的姓氏数组。我想将连接代码保存在一个地方,以便于维护。
这是我的代码,当然不起作用:
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。我能想到的唯一解决方案是不同的命名属性,这使得使用类更难,或者一大堆子和函数相互重载。
建议?
克里斯
答案 0 :(得分:2)
您不能重载属性,因此该属性可以是string
或string()
,而不是两者。
考虑为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
是否有人发现此问题?