vb.net - 如何防止在继承对象时多次执行 NEW() 构造函数中调用的同一个 Sub?- vb.net
问题描述
首先:我有3 个接口,每个都有一些包含所需程序集和许可证数据的类,前两个接口由下一个接口实现:ISolution --> IExtension --> IExportPlugin,它们的对象继承自基类 - 解决方案。
ISolution可以由任何应用程序实现,至少提供许可功能。 IExtension是IExport、IImport、IService等的基础 - 我计划了很多衍生产品,如果有必要,每种类型的扩展(插件)都需要进行许可证检查。
每个派生类在基类的 New() 中启动调用LicenseCheck子程序,如果未找到许可证,则显示 frmActivate 对话框。
因此,在继承中,它显示 ACTIVATE三次!!!. 请说,除了上次创建 IExportPlugin 时,我可以阻止这个窗口显示吗?
是的,我可以添加可选参数“OmitLicenseChecking”,但由于安全原因,这不是最好的主意。每个程序(exe 或 dll)都必须将其封装起来,没有任何可能避免检查。例如,检查是必须的并且必须隐藏。
谢谢朋友。对不起我的英语))
解决方案
根据提供的信息进行猜测
Public MustInherit Class Solution
Public Shared Lock As New Object
Public Shared Shown As Boolean
Public DoShow As Boolean
Public Sub New()
SyncLock Lock
If Not Shown Then
Shown = True
Me.DoShow = True
Else
Me.DoShow = False
End If
End SyncLock
End Sub
End Class
Public Class SolutionA : Inherits Solution
Public Sub New()
If Me.DoShow Then
Stop
End If
End Sub
End Class
Public Class SolutionB : Inherits Solution
Public Sub New()
If Me.DoShow Then
Stop
End If
End Sub
End Class
Public Class SolutionC : Inherits Solution
Public Sub New()
If Me.DoShow Then
Stop
End If
End Sub
End Class
为了测试,Stop 代表对话框,
Dim foo3 As New SolutionC
Dim foo2 As New SolutionB
Dim foo1 As New SolutionA
推荐阅读
- python - 尝试学习递归时得到奇怪的结果
- javascript - Angular:编写纯 JavaScript 并从 HTML 模板中获取元素
- symfony - EasyAdmin 3.1 尝试制作仪表板时出错
- mysql - 在 MySQL 中标记分隔字符串
- javascript - 将内容放入变量
- java - Java - 检查一个字符串是否是另一个字符串的子集
- firebase - 在颤振上注册后显示名称返回 null
- linux - 在 Linux 上使用 New-Item 创建一个新目录?
- ios - 使用 RxSwift 的 API 函数
- assembly - 如何正确输入字符串并输出?