2015-02-09 88 views
1

我有一个名为dRow的类包含一些数据。我有很多dRow,AccountRow,PageRow等的子类,它们只在代码中有所不同。现在我想添加一个单独的dRow ...单身人士对象和小类

Protected Shared EmptyRow as dRow 

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

Public Function EmptyRow() as dRow... 

现在的问题...我需要AccountRow返回EmptyRow作为AccountRow,而不是卓尔......

Friend Function EmptyRow() as AccountRow... 

DirectCast将无法正常工作,这是错的方向。它看起来像我必须有一个单独的EmptyRow为每个子类?

有什么办法可以避免这种命运吗?

+0

正确的; 'EmptyRow'不能有两个不相关的类型。 – SLaks 2015-02-09 21:31:42

回答

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

+0

啊哈!这看起来像一个解决方案。我以前从来没有使用过泛型,我会给它一个旋转! – 2015-02-09 23:34:09

+0

这是一种有趣的泛型使用,但它们可以非常强大。 – CoderDennis 2015-02-09 23:35:35