【发布时间】:2019-06-08 03:19:51
【问题描述】:
我有 2 个类 A 和 B,它们共享 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 的解决方案可能没有选择(? ),似乎也不会将常用函数打包到可行的基类中 (?)。
出于可维护性的原因,我希望将包含S1 和S2 的整个代码块定义在一个地方,最好是在一个专用文件"CommonMethods.vb" 中。
出于可用性原因,我需要直接访问所有成员,而不使用中间类C。 C 的存在绝对是反直觉的,无论它的名字是什么。输入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。
因此问题是:如何共享相同的代码文本?
【问题讨论】:
-
为什么不用通用代码创建一个基类并继承它呢?
-
@Vasya 继承类维护一个集合,比如
Private goTags As New Collection,基类中的函数S1和S2需要访问该集合。基类中的此类函数可能包含:Dim oText = New Text(Arg1)、goTags.Add(oText)、Return (oText)。 -
所以把
goTags也放在基类中,并声明它Protected。然后它的行为就像Private成员一样,但基类和派生类中的代码都可以访问它。
标签: .net vb.net visual-studio oop maintainability