【问题标题】:choose active namespace dynamically动态选择活动命名空间
【发布时间】:2013-01-30 05:10:27
【问题描述】:

首先,我不确定我正在计划的方式(并将在下面描述)是否一定是执行此操作的“最佳”方式,因此我愿意接受建议。我有一个应用程序,我需要添加在运行时从硬件监视器收集信息的能力。我需要以可扩展的方式构建这个通信框架,以便我可以支持具有不同通信协议的多个不同监视器。

我的计划是为每个不同的监视器编写一个类,每个监视器都将实现相同的方法。它看起来像下面这样:

Monitor1.vb:

Public Function GetHR() as integer
    //Code specific to interact with Monitor 1
    return HR as integer
End Function

Monitor2.vb:

Public Function GetHR() as integer
    //Code specific to interact with Monitor 2
    return HR as integer
End Function

然后我会在实现页面上选择活动监视器并调用该函数 实施.vb:

ActiveMon = Monitor1
CurrentHR = ActiveMon.GetHR()

如果这是设置活动类的可接受方法,我将如何设置它(我猜我上面简单设置变量的示例不是正确的方法)。如果这不是最好的方法,我该怎么做?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    通常对于这种类型的东西,您要么想要使用接口,要么想要使用继承。如果类有一些共同的共享代码,继承将是更好的选择。如果只需要呈现常用方法,接口就可以正常工作:

    Interface IMonitor
        Function GetHR() as Integer
    End Interface
    
    Public Class Monitor1
        Implements IMonitor
    
        Public Function GetHR() as Integer Implements IMonitor.GetHR
            ' Do Stuff
            Return someValue
        End Function
    End Class
    
    Public Class Monitor2
        Implements IMonitor
    
        Public Function GetHR() as Integer Implements IMonitor.GetHR
            ' Do other Stuff
            Return someValue
        End Function
    End Class
    

    然后你可以有一个接口类型的变量并赋值给它:

    Dim myMonitor as IMonitor
    myMonitor = new Monitor1()
    Dim result = myMonitor.GetHR() ' Some result
    myMonitor = new Monitor2()
    result = myMonitor.GetHR()     ' Some other result
    

    【讨论】:

    • 太棒了。谢谢你。我试试看。
    • @scholzr - Google 工厂设计模式
    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多