1

好的,所以我有一个类似这样的场景。首先,我有一个接口,我称它为Iinterface,接口中有一个方法(我称它为方法)。现在我有一个实现接口的超类和一个实现接口中方法的方法。有一个从超类继承的子类,但是在子类中,最初实现该方法的超类中的方法已被具有相同名称和签名的不同方法所覆盖。

在这种情况下,子类还会实现接口吗?

具体来说,这行得通吗?

Dim stuff as Iinterface
stuff = new SuperClass
'do some things
stuff = new SubClass

谢谢!

4

2 回答 2

0

是的,原来的 SuperClass 方法仍然会实现接口,但是使用原来的 Superclass 方法。如果签名相同,则使用覆盖而不是阴影。如果它没有相同的签名,则无论如何您都无法实现该接口。

Module Module1

  Sub Main()
    Dim myiTest As IMyInterface
    myiTest = New MySuperClass
    myiTest.MyMethod(1, "a")
    myiTest = New MySubClass
    myiTest.MyMethod(1, "a")
    myiTest = New MySubClass2
    myiTest.MyMethod(1, "a")
  End Sub


  Interface IMyInterface
    Sub MyMethod(a As Integer, b As String)
  End Interface

  Class MySuperClass
    Implements IMyInterface

    Public Overridable Sub MyMethod(a As Integer, b As String) Implements IMyInterface.MyMethod
      MsgBox("Original MyMethod")
    End Sub
  End Class

  Class MySubClass
    Inherits MySuperClass
    Public Shadows Sub MyMethod(a As Integer, b As String)
      MsgBox("Shadowed MyMethod")
    End Sub
  End Class

  Class MySubClass2
    Inherits MySuperClass
    Public Overrides Sub MyMethod(a As Integer, b As String)
       MsgBox("Overridden MyMethod")
    End Sub
  End Class
End Module
于 2012-07-02T04:25:31.657 回答
0

如果您不介意编译器警告,您可以有一个Shadows方法(再次)显式地实现接口。

Class MySubClass3
    Inherits MySuperClass
    Implements IMyInterface
    Public Shadows Sub MyMethod(ByVal a As Integer, ByVal b As String) Implements IMyInterface.MyMethod
        MsgBox("Shadowed re-Implemented MyMethod")
    End Sub
End Class

即使提供了警告,这仍然是Shadows编译的方法(所以

    Dim mysTest As MySuperClass = New MySubClass3
    mysTest.MyMethod(1, "a")

仍显示“原始 MyMethod”)。正如Microsoft对此警告的描述所解释的那样,当您确实打算重新实现该方法时,必须忽略或明确禁用该警告。

于 2012-07-02T05:57:08.913 回答