2010-01-25 65 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