我有一个基类列表,List(Of Person)
其中包含子类Employee
和变量Manager
我想调用SetName
列表中的每个人,但 vb.net 没有选择最窄的重载SetName
函数。有没有办法自动选择最窄的SetName
函数?这是我的示例代码
Module Example
Class Person
Public Name As String
End Class
Class Employee
Inherits Person
Public EmployeeID As String
End Class
Class Manager
Inherits Person
Public ManagerID As String
End Class
Sub Main()
Dim PersonList As New List(Of Person)
Call PersonList.Add(New Employee)
Call PersonList.Add(New Manager)
For Each CurrentPerson As Person In PersonList
Call SetName(CurrentPerson)
Next
End Sub
Public Sub SetName(AnyManager As Manager)
AnyManager.Name = "Manager Tom"
End Sub
Public Sub SetName(AnyEmployee As Employee)
AnyEmployee.Name = "Employee Bob"
End Sub
Public Sub SetName(AnyPerson As Person)
AnyPerson.Name = "Person Jim"
End Sub
End Module
列表中的每个人都以“Person Jim”结尾,但我希望第一个Employee
是“员工 Bob”,第二个Manager
是“经理 Tom”
这是最干净的方法吗?这是我能想到的唯一方法。在我的情况下这会变得混乱,因为我有大约 20 个派生类而不是 2 个。
For Each CurrentPerson As Person In PersonList
If TypeOf (CurrentPerson) Is Employee Then
Call SetName(CType(CurrentPerson, Employee))
ElseIf TypeOf (CurrentPerson) Is Manager Then
Call SetName(CType(CurrentPerson, Manager))
End If
Next
编辑:我想我没有让我的需求更清楚。Setname 只是为了代表任何需要列表中的窄类型而不是基类的函数。实际名称并不重要。也许我应该使用一个函数实际上与员工 ID 和经理 ID 混淆的示例。抱歉没有更清楚。