Vb.net 从基类共享函数访问派生类

Vb.net 从基类共享函数访问派生类,vb.net,Vb.net,我想重写此函数,以避免需要泛型参数,因为考虑到调用此函数的冗余性,它应该可以通过其他方式使用(T应始终指调用函数的类): 对于当前的实现,它将被这样调用(注意:LibCtl继承自FileStructure): 或者与理想的实现类似(因为上面看起来是多余的): 也许这更适合codereview?从技术上讲,这段代码还没有被审查过,这只是用一个实际的代码示例来问“如何从基类共享函数访问派生类类型而不显式提供它”这个问题的最简单的方法。所以我不知道这是否会对这个问题的归属产生影响。不过,我在这里发帖的

我想重写此函数,以避免需要泛型参数,因为考虑到调用此函数的冗余性,它应该可以通过其他方式使用(T应始终指调用函数的类):

对于当前的实现,它将被这样调用(注意:
LibCtl
继承自
FileStructure
):

或者与理想的实现类似(因为上面看起来是多余的):


也许这更适合codereview?从技术上讲,这段代码还没有被审查过,这只是用一个实际的代码示例来问“如何从基类共享函数访问派生类类型而不显式提供它”这个问题的最简单的方法。所以我不知道这是否会对这个问题的归属产生影响。不过,我在这里发帖的真正原因是,我以前从未使用过codereview.stackexchange.com,而且我怀疑它比stackoverflow吸引的人要少得多。我很惊讶code review甚至为它自己的站点提供了担保。您可以在child上覆盖基类型
FMXSize
函数,而child函数的内容是
Return MyBase.FMXSize(of LibCtl)(
)。不完全是您想要的,但父类永远不应该知道或关心谁在继承它们,因此尝试继承会违反一些OOP原则。@Mike_OBrien共享函数不能被重写,因此,这是行不通的。在我看来,您试图通过允许基类
FMXSize
函数知道其实际类型来删除基类的泛型性质,这要求父类知道可能从它继承的内容。就重写而言,这实际上是有道理的,我没有考虑函数的共享方面,这是我的错误。也许这更适合codereview?从技术上来说,这段代码还没有被审查过,这只是问问题的最简单方式,“如何从基类共享函数访问派生类类型而不显式提供它“使用真实的代码示例。所以我不知道这是否会对这个问题的归属产生影响。不过,我在这里发帖的真正原因是,我以前从未使用过codereview.stackexchange.com,而且我怀疑它比stackoverflow吸引的人要少得多。我很惊讶code review甚至为它自己的站点提供了担保。您可以在child上覆盖基类型
FMXSize
函数,而child函数的内容是
Return MyBase.FMXSize(of LibCtl)(
)。不完全是您想要的,但父类永远不应该知道或关心谁在继承它们,因此尝试继承会违反一些OOP原则。@Mike_OBrien共享函数不能被重写,因此,这是行不通的。在我看来,您试图通过允许基类
FMXSize
函数知道其实际类型来删除基类的泛型性质,这要求父类知道可能从它继承的内容。就重写而言,这实际上是有道理的,我没有考虑函数的共享方面,这是我的错误。
Public Shared Function FMXSize(Of T As {New, FileStructure})() As Integer
  Dim result As Integer
  If SizeCache.TryGetValue(GetType(T), result) Then Return result
  result = (New T()).CalculateSize()
  SizeCache(GetType(T)) = result
  Return result
End Function
Return LibCtl.FMXSize(Of LibCtl)()
Return LibCtl.FMXSize()