.net - 如何在不使用中间类或共享的情况下在各个类之间共享相同的代码片段?
问题描述
我有 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
都是绝对反直觉的。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
。
因此问题是:我如何共享相同的代码文本?
解决方案
您可以将所有通用功能(字段、属性、方法等)放在基类中,Protected
如果您希望基类和派生类可以访问它而不是这些类的消费者可以访问它,则可以声明它。如果基类之间的实现可能不同,您始终可以分别声明基类和这些MustInherit
成员MustOverride
。
推荐阅读
- php - 如何在 laravel 中为包含 php 代码的 li 设置特殊的类或 id?
- javascript - 下载/导出一个或多个表格的内容
- ios - SearchBar 的 Cancel Button 改变 StatusBar 的 Style
- powerbi - 适用于 Power BI 的 Azure 搜索内容包
- java - 捕获 Akka/Java 中的所有路径段
- scala - 仅在某些命令中设置 sbt 的 SettingKey
- reactjs - 无法从 RootContainer 导航
- vue.js - v 节点数据对象中的自定义事件处理程序
- jquery - 向下滚动到
在按钮上单击 jQuery - php - 使用 PHP 变量的 HTML 嵌入视频不起作用