放在首页,希望你们帮我来解说一下这个简单的问题,有没有其它的实现方式。

有两个接口
Public Interface IMessage
    Sub ShoMessage()
End Interface

Public Interface ITextInfo
    ReadOnly Property Text() As String
End Interface

实现这两个接口的类有两个
Public Class Message
    Implements IMessage
    Public Sub ShoMessage() Implements IMessage.ShoMessage
        MsgBox("Message")
    End Sub
End Class

Public Class TextInfo
    Implements ITextInfo
    Public ReadOnly Property Text() As String Implements ITextInfo.Text
        Get
            Return "TextInfo"
        End Get
    End Property
End Class

现在有一个第三方的类对这两个类进行操作
Public Class Manager
    Public Sub Execute(ByVal obj As Object)
        MsgBox("无效的类")
    End Sub

    Public Sub Execute(ByVal obj As ITextInfo)
        MsgBox(obj.Text)
    End Sub

    Public Sub execute(ByVal obj As IMessage)
        obj.ShoMessage()
    End Sub
End Class

下面的调用程序。
    Sub Main()
        Dim m As New Manager
        Dim obj As Object = New TextInfo
        m.Execute(obj)
        obj = New Message
        m.Execute(obj)
        Console.ReadLine()
    End Sub

为什么总是执行到了
   Public Sub Execute(ByVal obj As Object)
        MsgBox("无效的类")
    End Sub
这个方法。

目前我所知道的,如果外部不使用object能正确的找到对应的方法.

如果去掉Public Sub Execute(ByVal obj As Object)方法,也能执行正确,如果我目前需要有Public Sub Execute(ByVal obj As Object)这样一个方法,也能执行相应接口的方法啊。

posted on 2007-04-19 20:21  zqonline  阅读(419)  评论(3编辑  收藏  举报

导航