首页 > 解决方案 > 如何防止在继承对象时多次执行 NEW() 构造函数中调用的同一个 Sub?- vb.net

问题描述

首先:我有3 个接口,每个都有一些包含所需程序集和许可证数据的类,前两个接口由下一个接口实现:ISolution --> IExtension --> IExportPlugin,它们的对象继承自基类 - 解决方案。

ISolution可以由任何应用程序实现,至少提供许可功能。 IExtensionIExportIImportIService等的基础 - 我计划了很多衍生产品,如果有必要,每种类型的扩展(插件)都需要进行许可证检查。

每个派生类在基类的 New() 中启动调用LicenseCheck子程序,如果未找到许可证,则显示 frmActivate 对话框。

因此,在继承中,它显示 ACTIVATE三次!!!. 请说,除了上次创建 IExportPlugin 时,我可以阻止这个窗口显示吗?

是的,我可以添加可选参数“OmitLicenseChecking”,但由于安全原因,这不是最好的主意。每个程序(exe 或 dll)都必须将其封装起来,没有任何可能避免检查。例如,检查是必须的并且必须隐藏。

谢谢朋友。对不起我的英语))

标签: vb.netoopinheritanceconstructorinterface

解决方案


根据提供的信息进行猜测

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

推荐阅读