在继承对象时,如何防止多次执行NEW()构造函数中调用的同一个子类?-vb.net

在继承对象时,如何防止多次执行NEW()构造函数中调用的同一个子类?-vb.net,vb.net,oop,inheritance,constructor,interface,Vb.net,Oop,Inheritance,Constructor,Interface,首先:我有3个接口,每个接口都有一些类保存所需的程序集和许可证数据,前两个接口由下一个接口实现:隔离-->IExtension-->IExportPlugin,它们的对象继承自基类-解决方案 隔离可以由任何应用程序实现,至少可以提供许可功能。 IExtension是IExport、IImport、iSeries等的基础-我计划了很多衍生产品,如果有必要,每种类型的扩展(插件)都需要进行许可证检查 每个派生类在基类的New()中启动调用LicenseCheck子类,如果找不到许可证,则显示frmA

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

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

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

所以,在继承中,它显示激活三次。 喂,拜托,我能阻止这个窗口显示吗,除了上次,当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
要进行测试,其中停止表示对话框

    Dim foo3 As New SolutionC
    Dim foo2 As New SolutionB
    Dim foo1 As New SolutionA

如果你能发布一些东西,那么你当前实现的一个最小的代码示例将比一个描述更好……或者一个单元测试,在其中你展示插件如何使用你的代码有比任何代码都更重要的原则/方法。不管代码是什么,问题是如何锁定构造函数部分的多次执行(非常感谢你,我明天就试试。)