在不继承每个子类的情况下覆盖所有子类中的基本方法调用(VB.NET)

时间:2012-08-14 08:52:19

标签: .net vb.net inheritance virtual override

出于测试目的,我需要覆盖特定的方法调用,该调用目前在基类中实现。

 Public Overridable Function CreateFactory(Of TFactory As {IManagerFactory(Of IManager), Class})() As TFactory

我想避免为该基类的每个现有子类创建一个继承类(即CLAccountManager的CLTestableAccountManager,它继承自CLBase等)。

Public Class CLTestableAccountManager
  Inherits CLAccountManager

    Public Overrides Function CreateFactory(Of TFactory As {IManagerFactory(Of IManager), Class})() As TFactory

虽然这有效,但由于这将适用于许多类,因此会导致大量重复的代码。 只有在单元测试的上下文中使用时才能覆盖该方法,所以我不应该真正触及基类实现(虚拟/可覆盖)。

不幸的是,我不能简单地做一些像

这样的事情
Public Class CGenericBaseOverrider(Of TBase As {CLBase})
  Inherits TBase

实现覆盖CLBase所有子类的方法的通用方法。

有人能指出我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用合成而不是继承吗?

换句话说,出于测试目的,创建一个实现相同接口的类型(如果没有接口则引入接口)并将所有调用分开CreateFactory委托给你得到的任何生产代码 - 但是为那一个呼叫执行你的自定义行为。