单例对象和子类

时间:2015-02-09 21:27:33

标签: vb.net singleton

我有一个名为dRow的类,它包含一些数据。我有许多dRow,AccountRow,PageRow等子类。它们只在代码中有所不同。现在我想给dRow添加一个单身......

Protected Shared EmptyRow as dRow

EmptyRow是dRow的一个实例,它不包含任何数据。就在下面就是这个......

Public Function EmptyRow() as dRow...

现在问题......我需要AccountRow将EmptyRow作为AccountRow返回,而不是dRow ...

Friend Function EmptyRow() as AccountRow...

DirectCast不起作用,这是错误的方向。 看起来就好像我必须为每个子类都有一个单独的EmptyRow?

有没有办法避免这种命运?

1 个答案:

答案 0 :(得分:1)

泛型可能有用。您是在创建dRow的实例还是仅用作基类?如果它只是一个基类(可能有MustInherit个关键字),那么尝试这样的事情:

MustInherit Class dRow(Of T As New)
    Protected Shared _emptyRow As New T

    Public Shared Function EmptyRow() As T
        Return _emptyRow
    End Function

End Class

Class AccountRow 
    Inherits dRow(Of AccountRow)

End Class

Class PageRow
    Inherits dRow(Of PageRow)

End Class

EmptyRow函数现在将返回子类类型的单例实例。

您甚至可以添加这样的其他泛型类型约束,以确保子类仅使用dRow的实例作为其类型。

MustInherit Class dRow(Of T As {dRow(Of T), New})

请参阅https://msdn.microsoft.com/en-us/library/w256ka79.aspx