如何在不使用中间 class 或 Shared 的情况下在各种 class 之间共享相同的代码片段?
How do I share identical code snippets between various classes without using an intermediate class nor Shared?
我有 2 classes A
和 B
,它们共享 2 个函数 S1
和 S2
,它们由完全相同的代码组成 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
S1
和 S2
是与实例字段交互并生成一些对象的工厂函数,这些对象分别进入 A
和 B
中的本地集合,因此解决方案Shared
可能没有选项(?),似乎也没有将通用函数打包到 class 可行的基础中(?)。
出于可维护性的原因,我希望将包含 S1
和 S2
的整个代码块定义在一个地方,最好是在专用文件 "CommonMethods.vb"
.
出于可用性原因,我需要直接访问所有成员,而不使用中间 class 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
.
问题由此而来:如何共享相同的代码文本?
您可以将所有常用功能 - 字段、属性、方法等 - 放在基 class 中并声明它 Protected
如果您希望基 class 和派生的 classes 但不是那些 classes 的消费者。如果基础 class 之间的实现可能不同,您始终可以分别声明基础 class 和那些成员 MustInherit
和 MustOverride
。
我有 2 classes A
和 B
,它们共享 2 个函数 S1
和 S2
,它们由完全相同的代码组成 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
S1
和 S2
是与实例字段交互并生成一些对象的工厂函数,这些对象分别进入 A
和 B
中的本地集合,因此解决方案Shared
可能没有选项(?),似乎也没有将通用函数打包到 class 可行的基础中(?)。
出于可维护性的原因,我希望将包含 S1
和 S2
的整个代码块定义在一个地方,最好是在专用文件 "CommonMethods.vb"
.
出于可用性原因,我需要直接访问所有成员,而不使用中间 class C
。 C
的存在绝对是违反直觉的,无论它的名字是什么。键入 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
.
问题由此而来:如何共享相同的代码文本?
您可以将所有常用功能 - 字段、属性、方法等 - 放在基 class 中并声明它 Protected
如果您希望基 class 和派生的 classes 但不是那些 classes 的消费者。如果基础 class 之间的实现可能不同,您始终可以分别声明基础 class 和那些成员 MustInherit
和 MustOverride
。