首页 > 解决方案 > 如何在不使用中间类或共享的情况下在各个类之间共享相同的代码片段?

问题描述

我有 2 个类AB,它们共享 2 个函数S1,并且S2在两个类中都包含完全相同的代码:

Public Class A
    Private Coll as New Collection
    Public Sub A1()
    End Sub
    Public Function A2() As String
    End Function
    'Identical functions:
    Public Function S1() As Int32
        ...
        Coll.Add(Something1)
    End Function
    Public Function S2() As Boolean
        ...
        Coll.Add(Something2)
    End Function
End Class

Public Class B
    Private Coll as New Collection
    Public Sub B1(Arg1 As Boolean)
    End Sub
    Public Function B2() As Int32
    End Function
    'Identical functions:
    Public Function S1() As Int32
        ...
        Coll.Add(Something1)
    End Function
    Public Function S2() As Boolean
        ...
        Coll.Add(Something2)
    End Function
End Class

S1并且S2是工厂函数与实例字段交互并生成一些对象,这些对象分别进入A和中的本地集合B,因此解决方案Shared可能没有选项(?),也似乎将通用函数打包到一个可行的基类中(?)。

出于可维护性的原因,我希望将整个代码块包含S1S2定义在一个地方,最好是在一个专用文件"CommonMethods.vb"中。

出于可用性原因,我需要直接访问所有成员,而不使用中间类C。不管它的名字是什么,它的存在C都是绝对反直觉的。Intellisense 应在键入时显示以下成员A.

A1, A2, S1, S2

并不是

A1, A2, C

和打字的时候B.

B1, B2, S1, S2

并不是

B1, B2, C

如果#Include Filename存在于 VB.NET 中,我会这样做:

Public Class A
    Public Sub A1()
    End Sub
    Public Function A2() As String
    End Function
#Include CommonFunctions.vb
End Class

Public Class B
    Public Sub B1(Arg1 As Boolean)
    End Sub
    Public Function B2() As Int32
    End Function
#Include CommonFunctions.vb
End Class

但没有#Include

因此问题是:我如何共享相同的代码文本?

标签: .netvb.netvisual-studiooopmaintainability

解决方案


您可以将所有通用功能(字段、属性、方法等)放在基类中,Protected如果您希望基类和派生类可以访问它而不是这些类的消费者可以访问它,则可以声明它。如果基类之间的实现可能不同,您始终可以分别声明基类和这些MustInherit成员MustOverride


推荐阅读