REALbasic:在不同的子类之间共享公共代码



我有两个独立的类(A = bevelbutton的子类,B = PushButton的子类)。A和B都以完全相同的方式实现了许多相同的方法。由于两个子类的超类是不同的,并且由于RB不支持多重继承,所以我所能做的将这些方法联系在一起的就是定义一个类接口,让两个子类实现该接口,然后在每个子类中复制/粘贴方法体。

那冒犯了我的感情。在RB中是否有一种方法可以在其他地方提取这种共同逻辑?

谢谢!

使用模块方法中的Extends语法来扩展类接口。您仍然需要使用类接口,但是通过这种方式,所有的公共代码都可以放在模块中,而不是在多个类中重复。

Interface FooInterface
  Sub Foo()
End Interface
Class Foo
Implements FooInterface
  Sub Foo()
    MsgBox("Foo!")
  End Sub
End Class
Class Bar
Implements FooInterface
  Sub Foo()
    MsgBox("Bar!")
  End Sub
End Class
Module FooExtensions
  Sub Foobar(Extends FooImplementor As FooInterface)
    MsgBox("Foobar!")
  End Sub
End Module

上面的FooBar方法可以像任何实现了FooInterface类接口的类的类方法一样被调用:

Dim myfoo As FooInterface = New Bar
myfoo.Foobar()

注意,当编译器判断给定的类是否满足接口时,扩展方法不计算

这可能是不可行的,但是,因为扩展方法将只能访问接口,而不是实际的类。

或者,您可以扩展RectControl类,尽管它将包括所有桌面控件,而不仅仅是PushButton和BevelButton。

使用接口似乎是正确的方法,但与其将方法主体复制到每个子类,我认为使用通用代码创建一个新类(例如CommonButtonStuff)更有意义。然后你可以在实现的方法中调用它:

CommonButtonInterface
  Sub Method1
Class CommonButtonHandler
  Sub DoMethod1
    MsgBox("Do it!")
  End Sub
Class A Inherits From PushButton, Implements CommonButtonInterface
  Private Property mCommonStuff As CommonButtonHandler
  Sub Constructor
    mCommonStuff = New CommonButtonHandler
  End Sub
  Sub Method1
    mCommonStuff.DoMethod1
  End Sub
Class B Inherits From BevelButton, Implements CommonButtonInterface
  Private Property mCommonStuff As CommonButtonHandler
  Sub Constructor
    mCommonStuff = New CommonButtonHandler
  End Sub
  Sub Method1
    mCommonStuff.DoMethod1
  End Sub

相关内容

  • 没有找到相关文章

最新更新