协变返回类型和静态类

时间:2013-01-14 19:48:48

标签: vb.net design-patterns

请查看以下功能:

Public Function Test(ByVal i As Integer) As Animal
        If i = 1 Then
            Return New Dog
        Else
            Return New Cat
        End If

    End Function

函数返回一只狗或一只猫,具体取决于整数值是否为1。如果狗和猫是静态课程,这是如何接近的?即,您无法创建静态类的实例。我今天下午在MSDN网站上看了几个关于静态课程的网页,但我没有找到我的具体问题的答案。

2 个答案:

答案 0 :(得分:0)

  

如果Dog和Cat是静态课程,这是怎么回事?

事实并非如此。你不能“返回一个静态类” - 你需要总是返回一个对象。您可以在类上使用静态/共享方法来生成或操作对象。例如,如果您在类型上有工厂创建方法,则可以执行以下操作:

Public Function Test(ByVal i As Integer) As Animal
    If i = 1 Then
        Return Dog.Create(i)
    Else
        Return Cat.Create(i)
    End If

End Function

答案 1 :(得分:0)

术语“静态类”是一个C#概念,它在VB.NET中不存在。所以,不,这是不可能的。

在C#中也不可能,静态类只能从Object派生。与静态类最接近的VB.NET是Module。非常不合适。

您当然可以返回类的静态实例。如果要在类中声明它,请在模块中声明变量或使用Shared关键字。

Class Example 
    Private Shared theDog As Dog
    Private Shared theCat As Cat

    Public Shared Function Test(ByVal i As Integer) As Animal
        If i = 1 Then Return theDog Else Return theCat
    End Function
End Class