如何在不使用中间 class 或 Shared 的情况下在各种 class 之间共享相同的代码片段?

How do I share identical code snippets between various classes without using an intermediate class nor Shared?

我有 2 classes AB,它们共享 2 个函数 S1S2,它们由完全相同的代码组成 classes:

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

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

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

出于可用性原因,我需要直接访问所有成员,而不使用中间 class CC 的存在绝对是违反直觉的,无论它的名字是什么。键入 A.

时,Intellisense 应显示以下成员
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.

问题由此而来:如何共享相同的代码文本?

您可以将所有常用功能 - 字段、属性、方法等 - 放在基 class 中并声明它 Protected 如果您希望基 class 和派生的 classes 但不是那些 classes 的消费者。如果基础 class 之间的实现可能不同,您始终可以分别声明基础 class 和那些成员 MustInheritMustOverride