2010-01-25 67 views
1

我有以下的說法,我希望把它變成一個公共共享功能:申報返回類型時,有兩種可能的返回類型

If isEmployee Then 

    Dim employeeInstance As New Employee 
    employeeInstance = GetEmployeeInstanceByUserId(userId) 
    Return employeeInstance 

Else 

    Dim studentInstance As New Student 
    studentInstance = GetStudentInstanceByUserId(userId) 
    Return studentInstance 

End If 

公共共享功能GetWorkerInstance(BYVAL isEmployee布爾)作爲...(不知道這裏寫什麼)...

有兩種可能的返回類型。我不知道我應該爲函數返回類型聲明什麼。

有什麼建議嗎?謝謝。

+0

你能不能創建一個Person類,使他們既繼承? – Geo 2010-01-25 07:59:57

+0

我正在使用LINQ to SQL,這些是由LINQ自動生成的類。 – 2010-01-25 08:17:06

回答

2

如果EmployeeStudent類從一個父類(基類或接口)派生,那麼這將是最簡單的,那麼您可以使用它作爲返回類型。

您不能在一個函數上聲明不同的返回類型,並且您將無法創建返回不同類型的覆蓋,因爲方法簽名解析不考慮返回類型。

+0

這是兩個不同的類。這些是由LINQ自動生成的類。 – 2010-01-25 08:10:43

+0

您可以將您的方法更改爲通用方法,並使用通用返回類型(傳入並將返回類型轉換爲該類型)。 – Oded 2010-01-25 08:17:18

+1

我這樣說公共共享函數GetWorkerInstance(Byval isEmployee as Boolean)作爲對象,所以函數調用者需要施放它。你怎麼看? – 2010-01-25 08:21:29

0

通用

Private Class foo 
    Dim s As String = "FOO" 
End Class 
Private Class bar 
    Dim s As String = "BAR" 
End Class 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim o As Object = GetWorkerInstance(True) 
    If TypeOf o Is foo Then 
     Stop 
    Else 
     Stop 
    End If 
End Sub 
Public Shared Function GetWorkerInstance(ByVal isEmployee As Boolean) As Object 
    If isEmployee Then Return New foo Else Return New bar 
End Function